使用Multiselect的Android ListView不取消选择项目

时间:2015-06-11 08:05:36

标签: android listview onitemclick

我有一个多选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();
            }
        }          
    }

1 个答案:

答案 0 :(得分:0)

我认为您的问题可能是您正在创建要删除的新对象。如果你有一个&#34; A&#34;,&#34; B&#34;,&#34; C&#34;,&#34; D&#34;,&#34; B&#34;并且您调用删除(&#34; B&#34;)您的列表将是:

&#34; A&#34;,&#34; C&#34;,&#34; D&#34;,&#34; B&#34; (删除第一次出现)。我认为您必须在所选列表中查找与取消选择的对象相匹配的对象,然后将其删除。

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