问题是正确管理后退堆栈,以便弹出(或删除)前一个 fragment 。问题在于它们的重叠..

程序结构如下:

  • 滑动菜单,每个部分包含 3 个 fragment : CatalogFragmentNewsFragmentBlogFragment
  • 每个 fragment 都是一个带有项目的 ListView (从 JSON 解析);
  • 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/

    10-11 22:26
    查看更多