1

好的,所以通常我不是那种问的人,但我无法解决我的问题。所以我的第一个 StackOverflow-Question。

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

当用户在应用程序中深入时,“汉堡包”图标被替换为向上插入符号。在按下插入符号或后退键时,子片段从后台弹出,汉堡图标又回来了。

这是子片段中发生的情况:

@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 显示一个上下文操作栏,允许用户更改这些列表项。

如果打开该上下文操作栏并按下后退按钮,它会关闭(如预期的那样)但也会将向上插入符号更改为抽屉-汉堡图标-thingie。当然,我确实理解为什么会发生这种情况,但我没有看到(或能够在网上找到)一个干净的解决方案。

我是不是走错了路,还是我只是在这里错过了一个简单的步骤?我正在考虑将 setDrawerIndicatorEnabled 移动到 onBackStackChangedListener 并在那里侦听标记的 backStackItem。

但我想;在我开始弄乱我的所有代码之前,让我们先在野外问一个问题。

谢谢

4

1 回答 1

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 中弹出它,而不是检查 onBackPressed for (fragmentManager.getBackStackEntryCount () != 0),而是检查(fragmentManager.getBackStackEntryCount () == 1).

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

于 2014-03-26T11:33:22.193 回答