У меня есть multi-select listview
, где я хочу отслеживать, что пользователь выбрал и что они отменили. Когда пользователь нажимает на элемент списка, я добавляю щелкнутые элементы в ArrayList
, и когда они снова нажимают на него, я удаляю элемент из ArrayList
. Проблема в том, что операция отмены выбора (когда пользователь нажимает на элемент, уже нажатый ранее) снова добавляет в ArrayList
вместо удаления. Ниже приведен код onListItemClick
для этой деятельности:Android ListView с Multiselect не снимает выделение элементов
@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.add'ing, а затем вызывать метод' remove' на нем, а не на новый объект. –