如何使用上下文操作栏处理汉堡图标和up-caret-icon?

时间:2014-03-21 17:12:16

标签: android android-fragments navigation-drawer contextual-action-bar

好吧,通常情况下,我不是那种要求的人,但我无法解决我的问题谷歌搜索。 所以我的第一个StackOverflow-Question。

我有一个带导航抽屉的活动,它会触发一些碎片,这些碎片有自己的碎片。

当用户深入了解应用时,'汉堡包' -icon将被up-caret取代。按下插入符号或后退键时,从后台堆栈中弹出子碎片,然后汉堡包图标返回。

这是在subfragment中发生的事情:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        // Called when the up caret in actionbar is pressed
        getActivity().onBackPressed();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

在活动中:

@Override
public void onBackPressed() {
    // turn on the Navigation Drawer image
    FragmentManager fragmentManager = getSupportFragmentManager();

    if (fragmentManager.getBackStackEntryCount () != 0)
        mDrawerToggle.setDrawerIndicatorEnabled(true);
    }
    super.onBackPressed();
}   

到目前为止,这么好。

当我们深入细分时,问题就开始了。子片段有一个列表,onLongClickItem它显示了一个上下文操作栏,允许用户更改这些列表项。

如果打开上下文操作栏并按下后退按钮,它将关闭(按预期方式),但也会将up-caret更改为drawer-hamburger-icon-thingie。当然,我确实理解为什么会这样,但我没有看到(或能够在网上找到)一个干净的解决方案。

我是以错误的方式去做,还是我在这里错过了一个简单的步骤? 我正在考虑将setDrawerIndicatorEnabled移动到onBackStackChangedListener并监听标记的backStackItem。

但我想;在我开始弄乱我的所有代码之前,让我们在野外采取一些babysteps并在网上提问。

由于

1 个答案:

答案 0 :(得分:0)

下面的文字首先是关于问题的编辑,但由于没有人似乎不愿意回答我的问题,我已将其添加为答案,因此有类似问题的人可能会得到帮助。

如果有人有更好的答案,我仍然对更清洁的解决方案感兴趣。


好的,我设法解决了我自己的问题,但我并不确定我对此感到满意。我所做的是在onCreateActionMode中向backstack添加一个假条目,如下所示:

@Override
public boolean onCreateActionMode(ActionMode actionmode, Menu menu) {
    MenuInflater inflater = actionmode.getMenuInflater();
    inflater.inflate(R.menu.task_contextual_menu, menu);

    getActivity().getSupportFragmentManager()
                .beginTransaction()
                .addToBackStack(null)
                .add(new Fragment(), FAKE_BACKSTACK_ENTRY)
                .commit();

    return true;
}

然后在onDestroyActionMode中弹回,而不是为(fragmentManager.getBackStackEntryCount () != 0)签入onBackPressed,我检查(fragmentManager.getBackStackEntryCount () == 1)

我为解决方法感到自豪,但我意识到这不是最干净的解决方案......