【问题标题】:Need suggestions with ActionBar, Navigation Drawer and back stack需要关于 ActionBar、Navigation Drawer 和 back stack 的建议
【发布时间】:2013-09-22 15:40:33
【问题描述】:

我有一个 ActionBar 活动。在这个活动中,我从 Android API 实现了导航抽屉。

导航抽屉的一个选项设置一个 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));

    }

在 Inflating 新片段时,我还设置了 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();

【问题讨论】:

  • 你在使用ActionBarDrawerToggle吗?
  • @ana 01 是的,当然

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多