问题是正确管理后退堆栈,以便弹出(或删除)前一个 fragment 。问题在于它们的重叠..
程序结构如下:
CatalogFragment
、 NewsFragment
、 BlogFragment
; CatalogFragment
的项目点击我需要用 CatalogFragment
替换这个 LessonsFragment
,这也是列表。 附言物品是俄语的,但我想你能看懂
这是这些 fragment 的添加方式(动态):
@Override
public void onNavigationDrawerItemSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
// fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); //this also doesn't work
switch (position+1) {
case 1:
//getSupportFragmentManager().popBackStack(); // this doesnt work
fragmentManager.beginTransaction().replace(R.id.container,
CatalogFragment.newInstance(position + 1)).addToBackStack("catalog").commit();
break;
case 2:
fragmentManager.beginTransaction().replace(R.id.container,
NewsFragment.newInstance(position + 1)).addToBackStack("news").commit();
break;
case 3:
fragmentManager.beginTransaction().replace(R.id.container,
BlogFragment.newInstance(position + 1)).addToBackStack("blog").commit();
break;
}
}
这就是我如何在接口(interface)的
onCatalogFragmentInteraction
方法中用新的 fragment 替换 fragment : /** Methods for interaction with list items*/
@Override
public void onCatalogFragmentInteraction(String id){
//pop previous
getSupportFragmentManager().popBackStack("catalog", FragmentManager.POP_BACK_STACK_INCLUSIVE);
//add new
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.container, LessonsFragment.newInstance());
fragmentTransaction.addToBackStack("lessons");
fragmentTransaction.commit();
}
...而且效果很好:
但是当我从 slididng 菜单中移回 fragment 时, fragment 重叠了。
我相信问题出在正确的BackStack管理上,但我无法弄清楚自己做错了什么。另一个建议是,在这种情况下,我需要以某种方式更好地使用
add/replace
。我已经尝试从堆栈中按名称删除。也许需要通过 ID 删除它们?
附言告诉是否需要更多代码。
提前致谢。
最佳答案
我认为你的所有 fragment 都有透明背景,或者你没有设置任何东西(所以默认是透明的)。因此,当您在另一个 fragment 上方添加/替换 fragment 时,您可以看到下面的 fragment 。所以尝试为每个 fragment 布局设置背景颜色。
关于android - fragment 返回堆栈。即使在弹出后, fragment 也会重叠。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28088600/