切换ChoiceMode时,Android ListView选择的问题会发生变化

r41*_*41n 1 android listview selection

在尝试清除ListView中项目的选择(选择)时,我面临一种奇怪的行为.代码工作得很好,其功能允许(一次在CHOICE_MODE_MULTIPLE中)通过点击选择单个项目,选择全部,选择无并反转当前选择.由于ListView应该在两种模式下工作(_NONE和_MULTIPLE),我有这个菜单项可以在这些模式之间切换,允许用户"打开"一个项目或一次选择几个项目进行批量操作.

我所面临的问题仅在将选择模式从CHOICE_MODE_MULTIPLE更改回CHOICE_MODE_NONE时显示.我要做的是不仅要恢复到CHOICE_MODE_NONE,还要清除任何选择.奇怪的是,虽然所有函数都可靠地工作,但是当我在更改回CHOICE_MODE_NONE之前调用"select non"函数时,无论我在何处或何时调用代码中的"select none"函数,所有项都会保持检查状态.

处理选择更改的函数如下:

private void changeItemSelection(int selection) {
    NotesAdapter adapter = (NotesAdapter)listView.getAdapter();

    if (selection == SELECT_ALL) {
        for(int iCount = 0; iCount < adapter.getCount(); iCount++) {
            listView.setItemChecked(iCount, true);
        }
    }
    else if (selection == SELECT_NONE) {
        for(int iCount = 0; iCount < adapter.getCount(); iCount++) {
            listView.setItemChecked(iCount, false);
        }
    }
    else if (selection == SELECT_INVERT) {
        for(int iCount = 0; iCount < adapter.getCount(); iCount++) {
            listView.setItemChecked(iCount, !listView.isItemChecked(iCount));
        }       
    }
    adapter.notifyDataSetChanged();
    checkedItemCountInvalid = true; // Invalidate checked indices cache
}
Run Code Online (Sandbox Code Playgroud)

当用户点击切换选择模式的菜单项时,会发生这种情况:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_multisel:
            toggleSelectionMode();
            return true;                
        default:
            return super.onOptionsItemSelected(item);        
    }
}

private void toggleSelectionMode() {
    if (listView.getChoiceMode() == ListView.CHOICE_MODE_NONE) {
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }
    else {
        listView.setChoiceMode(ListView.CHOICE_MODE_NONE);
    }       
    changeItemSelection(SELECT_NONE);
}
Run Code Online (Sandbox Code Playgroud)

无论我在上面的代码块中放置"changeItemSelection(SELECT_NONE)",它都无法正常工作.但是,当我删除"listView.setChoiceMode(ListView.CHOICE_MODE_NONE)"时,它神奇地开始按预期工作.这让我发疯了...我真的很感激任何见解.

谢谢阅读!

编辑:我的意思是"不工作"是选择保持不变.因此,如果选择了item1和item3,则调用select none不会取消选中它们,但只有当我在上面提到的代码部分中调用该函数时才会取消选中它们.在不尝试更改选择模式的情况下调用select none可以完美地运行.

Fil*_* J. 5

我遇到了同样的问题.似乎已经有相关的问题有一个答案,表明它是Android中的一个错误.

我想这应该是评论,而不是答案.但我只是没有足够的声誉来评论这里.