2

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

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

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

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

我在片段中重写了 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();
4

1 回答 1

1

好吧,正如这里的文档所说,popBackStack() 是异步的。我想显示抽屉布局是因为您调用super.onOptionsItemSelected(menuItem).

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

于 2013-11-04T16:35:45.643 回答