问题类似于 这个 除了使用导航抽屉(ND)而不是使用View寻呼机(VP)这一事实。我有一个元素列表,当通过长按操作选择一个/多个项目时,它激活上下文操作栏(CAB)。当ND打开时,我想暂时隐藏CAB并显示基本操作栏,而当它关闭时再次显示带有所选项目的CAB。
该功能在ND官方中指定 文件 “在抽屉可见时隐藏上下文操作栏。”到目前为止,我无法在任何地方找到如何以一种很好的方式制作它,但我尝试了一种解决方法:
- ND打开时完成CAB并保存所选项目(如果有)。
- 当抽屉关闭时,启动启用CAB的操作模式,并从保存的列表中填充所选项目的列表。
Gmail应用程序可以体验我想要实现的一个示例。
提前谢谢您的回答!
为了达到这个要求,我从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;
}
为了达到这个要求,我从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;
}
如果您使用的是材料设计风格的导航抽屉,那么所接受的解决方案看起来并不那么好 ActionMode
坐在抽屉顶部,直到它完全打开。
另一种方法是使用 onDrawerStateChanged
相反,然后一旦你开始拖动抽屉,它将隐藏 ActionMode
:
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
mActionMode.finish();
}
该 链轮 库(披露:我是开发人员)在扩展时会自动执行此操作 NavigationDrawerActivity 和 SprocketsListFragment。而不是后者,也可以扩展 SprocketsFragment 并提供你的 AbsListView
在 getAbsListView()。当导航抽屉打开时, ActionMode
将被隐藏。当它关闭时,ActionMode将被恢复。