片段BackStack.片段即使在流行后也会重叠.

AnZ*_*Zya 3 android overlapping android-fragments fragment-backstack

问题是正确管理后台堆栈,以便先前(或删除)前一个片段.问题在于它们的重叠......

程序结构如下:

  • 滑动菜单与每个区段3个片段:CatalogFragment,NewsFragment,BlogFragment;
  • 每个片段都是带有项目的listView(从JSON解析);
  • CatalogFragment的项目点击我需要更换这个CatalogFragmentLessonsFragment,这是名单也.

ps项目是俄语,但我认为你可以理解

在此输入图像描述

这是添加(动态)这些片段的方式:

    @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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我如何用onCatalogFragmentInteraction接口中的方法替换片段中的新片段:

    /** 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();
}
Run Code Online (Sandbox Code Playgroud)

......这很好用:

在此输入图像描述

但是当我从slididng菜单片段重叠移回片段时.

在此输入图像描述

我相信问题在于正确的BackStack管理,但我无法弄清楚我做错了什么.另一个建议是,add/replace在这种情况下我需要以某种方式更好地使用.

我已经尝试从堆栈中删除名称.也许需要通过ID删除它们?

PS告诉是否需要更多代码.提前致谢.

Cha*_*nth 14

我认为你的所有片段都有透明的背景,或者你没有设置任何东西(所以默认是透明的).因此,当您在另一个片段上方添加/替换片段时,您可以看到下面的片段.因此,尝试为每个片段布局设置背景颜色.

  • 这不是正确的解决方案,重叠的片段将窃取您的输入事件.从而引起其他问题. (18认同)