【问题标题】:Navigation drawer open after popping fragment backstack弹出片段回栈后打开导航抽屉
【发布时间】:2016-06-11 17:18:10
【问题描述】:

所以我有一个带有片段的活动,片段有一个导航抽屉和页面的内容。当我打开抽屉并单击一个项目时,片段将替换为新片段。当我按下后退按钮时,我在片段管理器上调用 popBackStack,它会返回到第一个片段,但导航抽屉是打开的。

需要注意的几件事:当按下抽屉中的项目时,我在抽屉布局上调用 closeDrawers 并且在替换片段时抽屉关闭。如果我按下操作栏中的 UP 按钮,我可以将片段容器替换为新的主片段,但我希望能够将片段从堆栈中弹出。

为什么我回到主片段时抽屉卡在打开?

在抽屉项目的点击监听器中:

case 4:
        drawerLayout.closeDrawers();
        Fragment aboutFragment = new AboutFragment();
        fragmentTransaction.replace(R.id.fragment_container, aboutFragment, "AboutFragment");
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
        break;

这是操作栏中的向上箭头,这可行但很hacky:

case android.R.id.home:
    getFragmentManager()
            .beginTransaction()
            .replace(R.id.fragment_container, new MainActivityFragment())
            .commit();
    break;

【问题讨论】:

    标签: android android-layout android-fragments navigation-drawer drawerlayout


    【解决方案1】:

    替换

    drawerLayout.closeDrawers();
    

    drawerLayout.closeDrawer();
    

    【讨论】:

    • 是的!当我实现 Navigation Host Fragment 并从中恢复时,它就起作用了。所以,解决了我的问题。 drawerLayout.closeDrawers(); 关闭抽屉,但在从片段返回后再次打开抽屉!谢谢!
    【解决方案2】:

    在您的第一个片段的 onCreateView 中,只需关闭抽屉 mDrawerLayout.closeDrawer(Gravity.LEFT);

    【讨论】:

    • 不幸的是我试过了。它仍然显示它是打开的
    • 你把它作为导航抽屉的最后一条语句了吗?
    • 或者您可以做的另一件事是在后退按钮代码中 pop() 后关闭导航抽屉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多