如何清除android中的碎片背景
嗨如何清除片段回到堆栈使用下面的逻辑它不工作…
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) { mFragmentManager.popBackStack(); }
帮我..
尝试这个
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
上面的回答几乎是正确的,但是你需要在回退列表的后面加上一个警戒,因为它可以是空的:
private void clearBackStack() { FragmentManager manager = getSupportFragmentManager(); if (manager.getBackStackEntryCount() > 0) { FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0); manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); } }
while (getSupportFragmentManager().getBackStackEntryCount() > 0){ getSupportFragmentManager().popBackStackImmediate(); }
一种方法是标记 backstack
以及何时清除它
mFragmentManager.popBackStack("myfancyname", FragmentManager.POP_BACK_STACK_INCLUSIVE);
其中"myfancyname"
应该与addToBackStack
所使用的string相addToBackStack
。 例如
Fragment fancyFragment = new FancyFragment(); fragmentTransaction.replace(R.id.content_container, fancyFragment, "myfragmentag"); fragmentTransaction.addToBackStack("myfancyname");
backstack
的名称和片段的标签名称可以相同,但在这方面没有限制
从文档
如果已设置,并且提供了返回堆栈条目的名称或ID,则将使用所有匹配的条目,直到find不匹配的条目或达到堆栈的底部为止。 否则,直到但不包括该条目的所有条目都将被删除。
如果你不想为你的backstack使用一个名字,你可以使用第一个参数
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
这有点晚了,但我自己也有这个问题。 你可以做:
FragmentManager manager = getFragmentManager(); FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0); manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
相当自我解释; 你只要得到第一个条目,得到它的ID,然后popup一切,包括与该ID的条目。
我见过的最好的select是在这里。
int count = getSupportFragmentManager().getBackStackEntryCount(); if (count > 0) { getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); }