如何清除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); }