进入多选模式,未选择任何内容

时间:2012-12-07 19:29:12

标签: android android-listview

我们的UX要求按钮启动多选模式。这与长按一个项目会做同样的事情,但最初没有任何选择。

我在代码中看到的是我无法进入多选模式模式,除非我选择了某些内容,如果我取消选择该项目,则退出多选模式(上下文操作栏关闭)。

我也在其他应用程序(gmail)中试过这个,它的工作原理相同。

有没有办法进入多选模式,没有选择任何项目? 谢谢。

4 个答案:

答案 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;
    }
});