好吧,通常情况下,我不是那种要求的人,但我无法解决我的问题谷歌搜索。 所以我的第一个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并在网上提问。
由于
答案 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)
。
我为解决方法感到自豪,但我意识到这不是最干净的解决方案......