0

これは私のフラグメントのコードです:

public class MainFragment extends Fragment {

private final AnimEffect forwardAnimation = AnimEffect.LEFT_TO_RIGHT;
private String couponNumber;
private EditText couponET;
@Override
public void onResume() {
    ((MainActivity) getActivity()).toggleBtn(false);
    super.onResume();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.mainfragment, container, false);
    ImageButton profile = (ImageButton) view.findViewById(R.id.Profile);
    ImageButton scan = (ImageButton) view.findViewById(R.id.Scan);
    Button validate = (Button) view.findViewById(R.id.Validate);
    couponET = (EditText) view.findViewById(R.id.couponET);

    OnClickListener profileListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MainActivity) getActivity()).navigateTo(ProfileFragment.class, forwardAnimation);
        }
    };
    profile.setOnClickListener(profileListener);
    OnClickListener scanListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MainActivity) getActivity()).navigateTo(ScannerFragment.class, forwardAnimation);
        }
    };
    scan.setOnClickListener(scanListener);

    OnClickListener validateListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            String response = couponET.getText().toString();
            if (response.contentEquals("ok")) {
                ((MainActivity) getActivity()).navigateTo(OKResponseFragment.class, forwardAnimation);
            }

        }
    };
    validate.setOnClickListener(validateListener);

    return view;
}

@Override
public void onStart() {
    super.onStart();
    if ((couponET != null) && (couponNumber != null)) {
        couponET.setText(couponNumber);
    }
}

public void setCouponNumber(String number) {
    couponNumber = number;
    if (couponET != null) {
        couponET.setText(number);
    }
}

public void alert() {
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.warningdialog);
    dialog.setCancelable(true);
    Button ok = (Button) dialog.findViewById(R.id.cancel);
    ok.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    dialog.show();
}

}

さて、初めて、編集テキストは完璧に機能します。私はそれを使用したり、書き込んだりすることができます。フラグメントを変更してから戻ってきた場合、何もできません。編集テキストを押してもキーボードが表示されません。さらに、キーボードを閉じない場合、フラグメントを変更した後、戻ったときにキーボードがオンになるように、EditTextを押してからキーボードに書き込むと、何も表示されません。

これが私のFragmentActivityです。

public class MainActivity extends android.support.v4.app.FragmentActivity {

public static boolean scanner_active;

private Fragment f;

public static Intent login;

SharedPreferences settings;

private AnimEffect backPressAnimation = AnimEffect.LEFT_TO_RIGHT;

private ImageButton backButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    init();
    login = new Intent(MainActivity.this, WelcomeActivity.class);

}

private void init() {
    backButton = (ImageButton) findViewById(R.id.backButton);
    OnClickListener backButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            Class<?> previousFragment = getPreviousScreen();
            if (previousFragment != null) {
                navigateTo(previousFragment, backPressAnimation);
            } else {
                finish();
                if(!Constants.remind){
                    startActivity(login);
                }
            }
        }
    };
    backButton.setOnClickListener(backButtonListener);
    String name;
    TextView nameTV = (TextView) findViewById(R.id.nameTV);
    if (Constants.remind) {
        settings = getSharedPreferences("PrefFile", 0);
        name = settings.getString("email", null);
    } else {
        name = Constants.email;
    }
    nameTV.setText(name);
    navigateTo(MainFragment.class, AnimEffect.FADE_IN);
}

@Override
public void onBackPressed() {
    Class<?> previousFragment = getPreviousScreen();
    if (previousFragment != null) {
        navigateTo(previousFragment, backPressAnimation);
    } else {
        finish();
        if(!Constants.remind){
            startActivity(login);
        }
    }
}

public void navigateTo(Class<?> fragmentClass, AnimEffect effect) {
    removeOldFragment(effect);
    int animIn = Util.getInAnimation(effect);
    try {
        f = (Fragment) fragmentClass.newInstance();
    } catch (Exception e) {
        LogService.err("navigate", e.getMessage(), e, LogService.LOG_LEVEL_LITE);
    }

    if (f != null) {
        getSupportFragmentManager().beginTransaction().disallowAddToBackStack().setCustomAnimations(animIn, 0).add(R.id.fragment, f, fragmentClass.getSimpleName()).commitAllowingStateLoss();
    }
}

public Class<?> getPreviousScreen() {
    if ((f instanceof MainFragment) && f.isAdded()) {
        return null;
    } else if ((f instanceof ProfileFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof HelpFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof ScannerFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof OKUserResponseFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof OKResponseFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    }
    return null;
}

private void removeOldFragment(AnimEffect effect) {
    if ((f != null) && f.isAdded()) {
        int animOut = Util.getOutAnimation(effect);
        getSupportFragmentManager().beginTransaction().setCustomAnimations(0, animOut).remove(f).commitAllowingStateLoss();
        getSupportFragmentManager().executePendingTransactions();
    }
}

public void toggleBtn(boolean b) {
    backButton.setEnabled(b);
    if(b){
        backButton.setImageResource(R.drawable.back);
    }else{
        backButton.setImageResource(R.drawable.besmart2);
    }

}

public void setCouponText(String text) {
    // TODO Auto-generated method stub
    navigateTo(MainFragment.class, backPressAnimation);
    if ((f != null) && (f instanceof MainFragment)) {
        ((MainFragment) f).setCouponNumber(text);
    }
}

}

編集:4.xでは動作しますが、2.3.5や3.2などの以前のOSでは動作しません

4

1 に答える 1

0

検証ボタンを押すと、編集テキストが機能しない場合はイベントが表示され、アラートが表示され、アラートを閉じると機能することがわかりました。だから私がしたことは、ブールパラメータをアラートに渡して、trueの場合はdialog.dismiss();を呼び出すことです。そして、onCreateView()関数を呼び出します。

alert(true);

これによりアラートが作成され、表示されずにすばやく閉じられ、編集テキストが機能するようになります。

于 2012-11-28T13:24:10.750 に答える