我们的UX要求按钮启动多选模式。这与长按一个项目会做同样的事情,但最初没有任何选择。
我在代码中看到的是我无法进入多选模式模式,除非我选择了某些内容,如果我取消选择该项目,则退出多选模式(上下文操作栏关闭)。
我也在其他应用程序(gmail)中试过这个,它的工作原理相同。
有没有办法进入多选模式,没有选择任何项目? 谢谢。
答案 0 :(得分:1)
这非常hacky,但我通过选择一个项目来做到这一点,但是通过使背景暂时透明使其看起来没有被选中。当用户随后选择项目时,取消选择秘密选择的项目并且背景恢复正常。或者,如果它是被选中的秘密选择的项目(因此取消选择它),我重新选择它,然后设置一个布尔值以阻止它再次发生。
我还必须在onItemCheckedStateChanged中使用一个计数器,因为我正在从该回调中更改机密项的已检查状态,从而导致循环。
对于所有情况,可能不是一个理想的解决方案,但我认为目前没有另一种方法可以做到这一点,因为AbsListView can't easily be extended.
编辑:如果在隐藏所选项目的选定状态时屏幕方向发生变化,它将突然显示为被选中,因此您必须确保保存它应隐藏的事实,并在之后恢复它列表视图被重新创建。我必须使用View post()方法确保在listview完成配置更改后重绘所有子项后恢复。
编辑:另一个潜在的问题是,如果用户在没有选择任何项目的情况下尝试执行操作。至于应用程序知道 选择了一个项目,因此它将对该项目执行操作,除非您确定它没有。
答案 1 :(得分:1)
请致电:
mListView.setItemChecked(-1, true);
将启动ListView的actionMode,而不选择任何列表元素。
确保您在致电前正确设置了ListView:
mListView.setMultiChoiceModeListener( ... )
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
or
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
答案 2 :(得分:0)
你必须使用:
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
答案 3 :(得分:0)
如果您想更改操作栏,请从您的活动中调用此操作:
startActionMode(new ActionMode.Callback {
@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } });