2015-06-11 5 views
0

У меня есть 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(); 
      } 
     }   
    } 
+0

Я считаю, что вы должны помнить объект, когда 'selectedItems.add'ing, а затем вызывать метод' remove' на нем, а не на новый объект. –

ответ

0

Я думаю, ваша проблема может быть, что вы создаете новый объект для удаления. если у вас есть список «A», «B», «C», «D», «B», и вы вызвали remove («B»), ваш список будет следующим:

«A», «C» , "D", "B" (удаляет первое вхождение). Я думаю, вам придется искать объект в выбранном списке, который соответствует выбранному, а затем удалять его.

Я не уверен в поведении удаления нового объекта?

+0

Привет, Hughzi, он хорошо работает с первым элементом списка, но при нажатии на элемент 2-го списка приложение падает с помощью java.lang.IndexOutOfBoundsException: Недопустимый индекс 0, размер 0 – Kabs

+0

@ user4651322 Не могли бы вы опубликовать мне свой класс адаптера? – Hughzi

 Смежные вопросы

  • Нет связанных вопросов^_^