问题类似于this,除了使用导航抽屉(ND)而不使用View Pager(VP)这一事实。我有一个元素列表,当通过长按操作选择一个/多个项目时,它激活上下文操作栏(CAB)。当ND打开时,我想暂时隐藏CAB并显示基本操作栏,而当它关闭时再次显示带有所选项目的CAB。
该功能在ND官方documentation中指定“在抽屉可见时隐藏上下文操作栏。”。到目前为止,我无法找到如何以一种很好的方式制作它,但我尝试了一种解决方法:
Gmail应用程序可以体验到我想要实现的目标。
提前感谢您的回答!
答案 0 :(得分:4)
为了达到这个要求,我从ActionBarDrawerToggle回调方法调用这两个方法:
public void onDrawerOpened() {
if (mActionMode != null) {
mCheckedListItems = mListView.getCheckedItemPositions().clone();
mActionMode.finish();
}
}
public void onDrawerClosed() {
if (mCheckedListItems!=null) {
for (int i=0; i<mCheckedListItems.size(); i++) {
if (mCheckedListItems.valueAt(i)) {
mListView.setItemChecked(mCheckedListItems.keyAt(i), true);
}
}
}
mCheckedListItems = null;
}
答案 1 :(得分:4)
如果您使用的是材质设计风格的导航抽屉,那么所接受的解决方案看起来并不是很好,因为ActionMode
位于抽屉顶部,直到它完全打开
另一种方法是使用onDrawerStateChanged
代替,然后只要您开始拖动抽屉,它就会隐藏ActionMode
:
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
mActionMode.finish();
}
答案 2 :(得分:1)
Sprockets库(披露:我是开发人员)在扩展NavigationDrawerActivity和SprocketsListFragment时会自动执行此操作。除了后者之外,还可以扩展SprocketsFragment并在getAbsListView()中提供AbsListView
。打开导航栏时,将隐藏ActionMode
。当它关闭时,ActionMode将被恢复。