需要ActionBar,导航抽屉和后台堆栈的建议

时间:2013-09-22 15:40:33

标签: android fragment navigation-drawer android-actionbar-compat

我有一个ActionBar活动。在此活动中,我已经从Android API实现了Navigation Drawer。

导航抽屉的一个选项是设置ListFragment,其列表中包含一些元素。

当我单击某些元素时,我想创建一个新片段并将之前的ListFragment设置为堆栈。此外,我想通过单击ActionBar主页按钮来销毁这个新片段,以便返回到之前的ListFragment。

我的问题来到这里:当我点击操作栏的主页按钮时,会显示抽屉布局,而不是破坏片段......我该怎么办?

我在片段中有Overriden onOptionsItemSelected方法:

@Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case android.R.id.home:
                getFragmentManager()
                        .popBackStack();
        }
        return (super.onOptionsItemSelected(menuItem));

    }

此外,我在给新片段充气时将ListFragment设置为backstack:

getFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right)
                .replace(R.id.activity_main_fragment_container, fragment)
                .addToBackStack(null)
                .commit();

1 个答案:

答案 0 :(得分:1)

好吧,正如文档所说here,popBackStack()是异步的。我想显示抽屉布局是因为你打电话给super.onOptionsItemSelected(menuItem)

我建议您自行返回true处理此选择的所有情况(在此特定情况下:case android.R.id.home:),并调用getActivity().onBackPressed()(假设通过按下硬件返回按钮最后一个片段被删除,因为它应该)而不是直接弹出堆栈。我已经实现了类似的解决方案,它对我有用。