我有一个处理我的片段的活动。我创建了以下方法来添加/替换片段并将它们添加(或不添加)到后台堆栈:
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();
}
}
这工作正常,直到发生以下情况:
开始片段(F1,假);//backstack中没有任何内容
开始片段(F2,真);//F1在后台
开始片段(F3,假);//F1在后台
开始片段(F1,假);-> 当我调用它时,它进入“if”并且 popBackStack 将不起作用,所以我的应用程序停留在 F3 而不是返回 F1。如果我按下后退按钮,那么应用程序会转到 F1...
那么我在这里做错了什么?我已经检查了名称是否存储正确。