我需要能够通过这样的片段: A-> B-> C1 当我在 C1 时,我需要用 C2 替换它,但是当我按下时我应该被带回 B 而不是 C1 。 我可以这样做:
String tag = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
manager.popBackStack();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.mainActivity_container, fragment, tag);
ft.addToBackStack(tag);
ft.commit();
问题在于,当我从 C1 更改为 C2 时,片段 B 会让它 onCreateInnerView 方法调用。
我需要能够做到这样的事情: A-> B-> C1-> C2-> C1-> C2 并按下 C2 我应该去 B
如何在不重新创建片段 B 的情况下执行替换?
答案 0 :(得分:2)
您可以处理onBackPressed()事件并将当前片段替换为片段B。
答案 1 :(得分:0)
在转向片段时,您不需要popupstack
。因为它会调用你最后一个堆栈的片段onViewCreated
方法。
移至 B - > C1 , B - > C2 和 C1 - > C2 :
null
我希望它适合你。
答案 2 :(得分:0)
试试这可能对你有帮助, 只需更换两行,
manager.popBackStack();//Remove this line
ft.replace(R.id.mainActivity_container, fragment);//Remove 3rd param in this line
ft.addToBackStack(tag);//Remove this line
<强> EDITED 强>
你也可以试试这个
public void switchContent(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
for (int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
Fragment currentFragment = this.getSupportFragmentManager().findFragmentById(R.id.mainActivity_container);
if(currentFragment != B){
fragmentManager.popBackStack();
}
}
fragmentTransaction.replace(R.id.mainActivity_container, fragment).commit();
}