我在从Fragment
中删除特定的Backstack
时遇到问题。
就像,我有五个Fragments A -> B -> C -> D -> E
,并且所有Fragments
来自同一Activity with add to Backstack
的呼叫,并且添加了不使用replace的内容。
Calling order; A -> B -> C -> D -> E
。
当Fragment-E (last fragment)
是我当前的Fragment
并按下Back Button
时,我想去Fragment-B
。这意味着我不需要Fragment-C, Fragment-D and Fragment-E
。
此外,当有Fragment B
并按back button
时,将调用Fragment A
。所有fragment
也会同时发生这种情况。
还有一件事情,所有Fragment
都调用API
以从server
获取数据并填充到列表中。
帮助实现此方案。
答案 0 :(得分:0)
对于instanceof
,您有一个称为Fragments
的方法。因此,当您进入Fragment E
时,请尝试像
在添加操作fragmentTransaction.addToBackStack("fragmentC");
if(currentFragment instanceOf FragmentE) {
fragmentManager.popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
答案 1 :(得分:0)
您需要在override onBackPressed()
的{{1}}中添加Activity
。
您可以创建自己的逻辑。例如检查Fragment
是否为current fragment
,您需要致电instanceof FragmentE
三次以删除getFragmentManager().popBackStack();
Fragments C -> D -> E
希望这会有所帮助
答案 2 :(得分:0)
在您的活动中,重写onBackPressed()方法并添加以下代码
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
if (fragment instanceof FragmentE) {
getSupportFragmentManager().popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
} else {
super.onBackPressed();
}
}
在添加每个片段时,请记住不要忘记在.addToBackStack("whichFragment")
之前添加transaction.commit();
。
.popBackStack ("fragmentC", FragmentManager.POP_BACK_STACK_INCLUSIVE) //this essentially means also remove FragmentC