Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 进入多选模式,不选择任何内容_Android_Android Listview - Fatal编程技术网

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

Android 进入多选模式,不选择任何内容,android,android-listview,Android,Android Listview,我们的用户体验需要一个按钮来启动多选模式。这与长时间按某个项目的操作相同,但最初不会选择任何内容 mListView.setItemChecked(-1, true); 我在代码中看到的是,除非我选择了某个项目,否则我无法进入多选模式,如果我取消选择该项目,多选模式将退出(上下文操作栏关闭) mListView.setItemChecked(-1, true); 我也曾在其他应用程序(gmail)中尝试过这一点,效果也一样 mListView.setItemChecked(-1, true)

我们的用户体验需要一个按钮来启动多选模式。这与长时间按某个项目的操作相同,但最初不会选择任何内容

mListView.setItemChecked(-1, true);
我在代码中看到的是,除非我选择了某个项目,否则我无法进入多选模式,如果我取消选择该项目,多选模式将退出(上下文操作栏关闭)

mListView.setItemChecked(-1, true);
我也曾在其他应用程序(gmail)中尝试过这一点,效果也一样

mListView.setItemChecked(-1, true);
是否有一种方法可以在不选择任何项目的情况下处于多选模式? 谢谢

您只需使用:

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mListView.setItemChecked(-1, true);

如果要更改操作栏,请从“活动”中调用:

mListView.setItemChecked(-1, true);
startActionMode(新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;
    }
});
mListView.setItemChecked(-1, true);

这很有黑客味,但我通过选择一个项目来做到这一点,但通过使背景暂时透明,使其看起来像未被选择。当用户选择一个项目时,将取消选择秘密选择的项目,并将背景恢复为正常。或者,如果选择的是秘密选择的项目(因此取消选择它),我重新选择它,然后设置一个布尔值来阻止它再次发生

mListView.setItemChecked(-1, true);
我还必须在OnItemHeckedStateChanged中使用一个计数器,因为我在该回调中更改机密项的已检查状态,从而导致循环

mListView.setItemChecked(-1, true);
可能不是所有情况下的理想解决方案,但我认为目前没有其他方法可以做到这一点,因为

mListView.setItemChecked(-1, true);
编辑:如果在选定项目的选定状态处于隐藏状态时屏幕方向发生变化,它将突然显示为处于选定状态,因此您必须确保保存应该隐藏的事实,并在重新创建listview后将其还原。我必须使用View post()方法,以确保在配置更改后listview完成其所有子项的重画后发生恢复

mListView.setItemChecked(-1, true);

编辑:另一个潜在的问题是,如果用户试图执行操作,而假定没有选择任何项目。只要应用程序知道有选择的项目,它就会对该项目执行操作,除非您确保没有选择。只需调用:

mListView.setItemChecked(-1, true);
ListView的actionMode将在不选择任何列表元素的情况下启动

mListView.setItemChecked(-1, true);
在调用之前,请确保已正确设置ListView:

mListView.setItemChecked(-1, true);
mListView.setMultiChoiceModeListener( ...  )
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
or
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

除非我在listview中选择了一个项目,否则这不起作用。我自己不是在管理操作模式,listview在管理它。我从来没有调用startActionMode()。这是一篇旧文章,但我想确认这对我有效,并且是一种在需要时启动上下文操作栏的简单方法。