导航抽屉打开时隐藏上下文操作栏

时间:2014-01-22 16:18:32

标签: android navigation-drawer contextual-action-bar

问题类似于this,除了使用导航抽屉(ND)而不使用View Pager(VP)这一事实。我有一个元素列表,当通过长按操作选择一个/多个项目时,它激活上下文操作栏(CAB)。当ND打开时,我想暂时隐藏CAB并显示基本操作栏,而当它关闭时再次显示带有所选项目的CAB。

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

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

Gmail应用程序可以体验到我想要实现的目标。

提前感谢您的回答!

3 个答案:

答案 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库(披露:我是开发人员)在扩展NavigationDrawerActivitySprocketsListFragment时会自动执行此操作。除了后者之外,还可以扩展SprocketsFragment并在getAbsListView()中提供AbsListView。打开导航栏时,将隐藏ActionMode。当它关闭时,ActionMode将被恢复。