【发布时间】:2014-01-16 07:52:47
【问题描述】:
我的项目包含两个片段:
- FragmentA : 应用启动时默认加载的片段
- FragmentB:当点击按钮完成时替换
fragmentA。
这是我的主要视图的 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/main_fragment_container"
android:name="fragmentA"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
</LinearLayout>
当我想用FragmentB 替换FragmentA 时,我使用这个代码:
FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.main_fragment_container, new FragmentB());
fragmentTransaction.commit();
此代码运行良好。我的 FragmentA 被新的FragmentB 取代。但是当点击后退按钮时,我希望使用popBackStackImmediate() 将FragmentB 替换为FragmentA。
这是我使用的代码:
if (getSupportFragmentManager().getBackStackEntryCount() > 0){
boolean done = getFragmentManager().popBackStackImmediate();
fragmentTransaction.commit();
}
函数 popBackStackImmediate 总是返回 false 并且 FragmentB 仍然在前台。
当我调用 popBackStackImmediate 时,为什么 FragmentA 没有替换 FragmentB ?有人有办法解决我的问题吗?
提前致谢
【问题讨论】:
-
避免使用后退栈!它对整体效率并没有真正的帮助!每次要导航时都使用普通的 replace() 甚至更好的删除/添加!查看我在stackoverflow.com/questions/5802141/…的帖子