【问题标题】:Android ListView with Multiselect not deselecting items带有Multiselect的Android ListView不会取消选择项目
【发布时间】:2015-06-11 08:05:35
【问题描述】:

我有一个多选listview,我想在其中跟踪用户选择的内容和取消选择的内容。当用户单击列表项时,我将单击的项目添加到ArrayList 中,当他们再次单击它时,我从ArrayList 中删除该项目。问题是取消选择操作(当用户单击之前已单击的项目时)再次添加到 ArrayList 而不是删除。 以下是该活动的onListItemClick 代码:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CheckBox checkBox = (CheckBox) view.findViewById(R.id.chk_forEasyPayListItem);
        int stringPos = 0;
        selectedBiller = billerNamesArray[position];
        selectedBillerAccountNumber = billerAccountsArray[position];
        selectedBillerBalance = billerToPayBalances[position];

        SparseBooleanArray sparseBooleanArray = lstPayMyBills.getCheckedItemPositions();
        if (sparseBooleanArray != null && sparseBooleanArray.size() > 0) {
            for (int index = 0; index < sparseBooleanArray.size(); index++) {
                if (sparseBooleanArray.valueAt(index)) {
                    lstPayMyBills.setItemChecked(sparseBooleanArray.keyAt(index), true);
                    checkBox.setChecked(true);
                    selectedItems.add(new PayMyBillsListItemModel(position, selectedBiller, selectedBillerAccountNumber, selectedBillerBalance));
                    adapter.notifyDataSetChanged();
                    Toast.makeText(getApplicationContext(), "Array size is " + selectedItems.size(), Toast.LENGTH_LONG).show();
                } else {
                    lstPayMyBills.setItemChecked(sparseBooleanArray.keyAt(index), false);
                    checkBox.setChecked(false);
                    //selectedItems.remove(new PayMyBillsListItemModel(position, selectedBiller, selectedBillerAccountNumber, selectedBillerBalance));
                }
            }
        } else {
            for (int index = 0; index < lstPayMyBills.getCount(); index++) {
                lstPayMyBills.setItemChecked(index, true);
                checkBox.setChecked(false);
                selectedItems.remove(new PayMyBillsListItemModel(position, selectedBiller, selectedBillerAccountNumber, selectedBillerBalance));
                adapter.notifyDataSetChanged();
                Toast.makeText(getApplicationContext(), "Array size is " + selectedItems.size(), Toast.LENGTH_LONG).show();
            }
        }          
    }

【问题讨论】:

  • 我相信你必须记住 selectedItems.adding 时的对象,然后在其上调用 remove 方法,而不是在新对象上。

标签: android listview onitemclick


【解决方案1】:

我认为您的问题可能是您正在创建要删除的新对象。如果您有一个“A”、“B”、“C”、“D”、“B”的列表,并且您调用了 remove("B"),那么您的列表将是:

“A”、“C”、“D”、“B”(删除第一个匹配项)。我认为您必须在所选列表中查找与取消选择的对象匹配的对象,然后将其删除。

我不确定删除新对象的行为?

【讨论】:

  • 你好 Hughzi,它适用于第一个列表项,但是在单击第二个列表项时,应用程序崩溃并出现 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
  • @user4651322 你能把你的适配器类发给我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 2013-07-19
  • 2012-05-20
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多