Как изменить цвет фона выбранных элементов в ListView?

Я видел много вопросов simillar, и каждый ответ очень специфичен для проблемы и прямой ответ прямо, или я не нашел учебники, которые показывают, как создать флажок, отмеченный на выбранных элементах. И мне трудно понять, как это сделать из этих кодов.

Я следую найденному здесь учебнику, и это преатит, как мой код выглядит только по-разному.

Я хочу иметь множественный выбор ListView, когда элемент, выбранный цветом фона, изменен, чтобы отметить выбранные элементы.

Может быть, я могу это сделать с помощью пользовательского селектора? Я понял, что общий способ – сохранить позиции выбранного и сделать что-то в функции getView. Я видел людей, создающих ViewHolder, но я действительно не понимал, что он должен делать с чем угодно. Может кто-нибудь, пожалуйста, помогите мне?

Заранее благодарим, Эрик

Ну, я наконец решил это, надеюсь, это кому-то поможет:

Я создал ArrayList<Integer> который сохраняет все позиции выбранных элементов и переключает цвета фона при нажатии.

В моем адаптере я определяю:

 public ArrayList<Integer> selectedIds = new ArrayList<Integer>(); 

Следующим методом:

  public void toggleSelected(Integer position) { if(selectedIds.contains(position)) { selectedIds.remove(position); } else { selectedIds.add(position); } } 

Который добавляет \ удаляет элементы из массива ArrayList

В моем методе getView:

  if (selectedIds.contains(position)) { convertView.setSelected(true); convertView.setPressed(true); convertView.setBackgroundColor(Color.parseColor("#FF9912")); } else { convertView.setSelected(false); convertView.setPressed(false); convertView.setBackgroundColor(Color.parseColor("#000000")); } 

Это проверяет, сохраняется ли позиция в ArrayList. Если это так, покрасьте его как выбранный. Если нет, наоборот.

Все осталось, это прослушиватель OnItemClick, я добавил:

  ((YourAdapter)list.getAdapter()).toggleSelected(new Integer(position)); 

Когда YourAdapter является адаптером вашего ListView

Надеюсь, это поможет кому угодно, так как это общий ответ 🙂

Вы также можете установить следующий селектор в качестве фона для отображения списка элементов:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@color/android:transparent" /> <item android:drawable="@drawable/listitem_normal" /> </selector> 

Источник: элемент списка ListView с помощью настраиваемого селектора

Существует простой XML-решение. Ниже приведен синтаксис WRT API 15. Я использовал следующий шаблон списка:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/item_selection"> <ImageView /> <.. /> </LinearLayout> 

Он указывает на файл item_selection.xml в res / drawable-hdpi (в Android Studio 0.8.14):

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/holo_blue_dark" android:state_selected="true" /> </selector>