を削除します。私は3つの断片持つフラグメントの問題
Aは私のメインのフラグメントであるが、Bは、成功したログインがCフラグメントを入力し、ログイン断片です。私は戻るボタンをクリックして、私は断片C.からのフラグメントAへ
を移動する必要が私の問題は、私は戻るボタンをクリックしたとき、私はまだフラグメントA.
から断片Bに移動し、ということである問題を解決するにはどうすればよいですか?ここで
は私のスイッチフラグメント機能である:B(LoginFragment)フラグメントへ
public void switchFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
transaction.addToBackStack(null);
transaction.commit();
}
断片(NewHomepage):
switchFragment(LogInFragment.newInstance());
これは私のB断片である、それは決定する値logged
を持っていますスイッチはC断片から来たときに断片かどうかを判断します。
私はその問題がここになければならないと思う、フラグメントに戻って戻るボタンをクリックするとAPPを終了したいと思う、私はlogcatショー1 =>と2 =>を見ることができる。ここで
String logged = memberData.getUD_MBTYPENAME(); //get the value when login succeed
Log.d(TAG,"1=>"+logged);
//If UD_MBTYPENAME is not null,change to A fragment
if (!TextUtils.isEmpty(logged)) {
Log.d(TAG,"2=>"+logged);
((MainActivity) getActivity()).switchFragment(NewHomepage.newInstance());
}
はonKeyDownメソッドとswitchFragmentについての私のMainActivityについてです:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
quickDialog();//It's a alert dialog
return false;
}
}
return super.onKeyDown(keyCode, event);
}
public void switchFragment(Fragment fragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
transaction.addToBackStack(null);
transaction.commit();
}
私はtransaction.addToBackStack(null);
を使用しない場合、参照は、次のようにコードを変更してください、問題がたとえ削除し、まだそこにありますtransaction.addToBackStack(null);
私はAに戻ると、警告ダイアログを表示するために2回クリックする必要があります。フラグメントの最初の部分をクリックすると何が起こったのか分かりません。
if (!TextUtils.isEmpty(logged)){
Log.d(TAG,"2=>"+logged);
hideFragment(LogInFragment.newInstance());
switchFragment(NewHomepage.newInstance());
}
public void switchFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
//remove it will fix my issue , but I have to click back twice to show alert dialog , I don't know what happened click it first time in A fragment.
//transaction.addToBackStack(null);
transaction.commit();
}
public void hideFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.hide(fragment);
transaction.commit();
}
hideFragment
を削除し、switchFragmentにmanager.popBackStack();
を使用し、問題が修正されます。
可能な重複(http://stackoverflow.com/questions/31198894/how-to-delete-a-specific-fragment-from-back [アンドロイドでバックスタックから特定の断片を削除する方法] -stack-in-android) – Tauqir
お世話になりました。私はあなたのリンクから答えを見つけることができます。どうもありがとうございました。 –