【发布时间】:2014-02-09 03:12:20
【问题描述】:
我有一个 Activity 来处理我的片段。我创建了以下方法来添加/替换片段并将它们添加(或不添加)到后台堆栈:
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); //backstack中什么都没有
startFragment(F2, true); //F1在backstack中
startFragment(F3, false); //F1在backstack中
startFragment(F1, false); -> 当我调用它时,它进入“if”并且 popBackStack 将不起作用,所以我的应用程序停留在 F3 而不是返回 F1。如果我按下后退按钮,那么应用程序会转到 F1...
那么我在这里做错了什么?我已经检查了名称是否存储正确。
【问题讨论】:
标签: android android-fragments back-stack fragmenttransaction