フラグメントを処理するアクティビティがあります。フラグメントを追加/置換し、それらをバックスタックに追加する (または追加しない) ために、次のメソッドを作成しました。
public void startFragment(CCFragment fragment, boolean addToBackStack) {
final String fragmentTag = fragment.getClass().getSimpleName();
final FragmentManager fragmentManager = getSupportFragmentManager();
// If my fragment is already in the backstack, I don't want to add
// it again, but go back to it:
boolean fragmentPopped=false;
if(fragmentManager.findFragmentByTag(fragmentTag)!=null){
fragmentPopped=true;
fragmentManager.popBackStack(fragmentTag,0);
}
//If it is not, I want to add/replace it
if (!fragmentPopped) {
fragment.setFragmentDelegate(this);
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.replace(CONTENT_VIEW_ID, fragment, fragmentTag);
if (addToBackStack)
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
次のシナリオが発生するまで、これは正常に機能します。
startFragment(F1, false); //バックスタックには何もありません
startFragment(F2, true); //バックスタックの F1
startFragment(F3, false); //バックスタックの F1
startFragment(F1, false); ->これを呼び出すと、「if」に入り、popBackStack が機能しないため、アプリは F1 に戻るのではなく、F3 にとどまります。戻るボタンを押すと、アプリは F1 に移動します...
それで、私はここで何が間違っていますか?名前が正しく保存されているかどうかはすでに確認しました。