问题 导航抽屉打开时隐藏环境操作栏


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

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

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

Gmail应用程序可以体验我想要实现的一个示例。

提前谢谢您的回答!


7672
2018-01-22 16:18


起源



答案:


为了达到这个要求,我从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;
}

4
2018-01-27 11:52



我的方法类似,但您也保留了已检查项目的列表。我认为如果没有这种解决方法,可以采用更自然的方式。不管怎样,谢谢。虽然我会在接受你的回复之前等待其他意见。 - Cosmin
+1代码,:-) - German Latorre


答案:


为了达到这个要求,我从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;
}

4
2018-01-27 11:52



我的方法类似,但您也保留了已检查项目的列表。我认为如果没有这种解决方法,可以采用更自然的方式。不管怎样,谢谢。虽然我会在接受你的回复之前等待其他意见。 - Cosmin
+1代码,:-) - German Latorre


如果您使用的是材料设计风格的导航抽屉,那么所接受的解决方案看起来并不那么好 ActionMode 坐在抽屉顶部,直到它完全打开。

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

@Override
public void onDrawerStateChanged(int newState) {
    super.onDrawerStateChanged(newState);
    mActionMode.finish();
}

4
2018-02-24 01:57





链轮 库(披露:我是开发人员)在扩展时会自动执行此操作 NavigationDrawerActivity 和 SprocketsListFragment。而不是后者,也可以扩展 SprocketsFragment 并提供你的 AbsListView 在 getAbsListView()。当导航抽屉打开时, ActionMode 将被隐藏。当它关闭时,ActionMode将被恢复。


1
2017-12-09 19:24