11

问题与类似,除了我想使用导航抽屉(ND)而不是使用视图寻呼机(VP)。我有一个元素列表,当通过长按操作选择一个/几个项目时,它会激活上下文操作栏 (CAB)。当 ND 打开时,我想暂时隐藏 CAB 并显示基本操作栏,而当它关闭时,再次显示带有所选项目的 CAB。

该功能在 ND 官方文档“在抽屉可见时隐藏上下文操作栏”中指定。到目前为止,我在任何地方都找不到如何以一种好的方式制作它,但我尝试了一种解决方法:

  • ND 打开时完成 CAB 并保存所选项目(如果有)。
  • 当抽屉关闭时,启动启用 CAB 的操作模式并从保存的列表中填充所选项目的列表。

我尝试实现的一个示例可以通过 Gmail 应用程序体验。

提前感谢您的任何回答!

4

3 回答 3

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;
}
于 2014-01-27T11:52:42.570 回答
4

如果您使用的是材料设计风格的导航抽屉,则公认的解决方案看起来并不那么好,因为它ActionMode位于抽屉的顶部,直到它完全打开。

另一种方法是使用onDrawerStateChanged,然后一旦您开始拖动抽屉,它将隐藏ActionMode

@Override
public void onDrawerStateChanged(int newState) {
    super.onDrawerStateChanged(newState);
    mActionMode.finish();
}
于 2015-02-24T01:57:15.357 回答
1

Sprockets库(披露:我是开发人员)在扩展NavigationDrawerActivitySprocketsListFragment时会自动执行此操作。除了后者,还可以扩展SprocketsFragmentAbsListView并在getAbsListView()中提供您的。当导航抽屉打开时,ActionMode将被隐藏。并且当它关闭时,ActionMode 将被恢复。

于 2014-12-09T19:24:48.613 回答