Подтвердить что ты не робот

Выделение выделенного элемента в списке в андроиде

У меня есть 1 просмотр списка contactslist. Я написал код для выделения выделенного элемента в ListView. Это работает. Когда я нажимаю на 1 элемент, он выделяет этот элемент, но проблема в том, что если я нажму на другой элемент, это также подчеркивает это. Я хочу выделить только выбранный элемент. Предыдущий выбор должен исчезнуть, когда я нажму на другой элемент.

arg1.setBackgroundResource(R.drawable.highlighter);

Это код в прослушивателе кликов, чтобы выделить выделенный элемент. PLZ помочь мне.

Обновить
Я устанавливаю фон строк в адаптере:

public int[] colors = new int[]{0xFFedf5ff, 0xFFFFFFFF}; 
public int colorPos; 

[...]
colorPos = position % colors.length; 
row.setBackgroundColor(colors[colorPos]);
4b9b3361

Ответ 1

ListViews по умолчанию не установлен choiceMode (он установлен на none), поэтому текущий выбор не отображается визуально.

Чтобы изменить это, вам просто нужно установить атрибут choiceMode вашего ListView на singleChoice.

Если вам нужен пользовательский фон для выбранных элементов в вашем списке, вы также должны установить атрибут listSelector. Там вы можете указать не только цвета, но и чертежи (изображения, слои/состояния).

<ListView android:id="@+id/my_list"
        android:choiceMode="singleChoice" 
        android:listSelector="@android:color/darker_gray" />

Если вы не используете ListView напрямую, а ListActivity, то эти атрибуты должны быть установлены из кода, поэтому вам следует расширить метод onCreate с этими строками:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setSelector(android.R.color.darker_gray);

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

Ответ на обновление

Если вы установите фон из своего метода getView, вместо использования статического цвета, примените список состояний, пригодный для рисования на фоне строк с duplicateParentState, установленным в true. Таким образом, он изменит свой дисплей на основе текущего состояния элемента: нормального, сфокусированного, нажатого и т.д.

Ответ 2

В listview xml добавьте режим "singleChoice"

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice"
    (...) >
</ListView>

В макете списка добавить

Android: фон = "андроид: атр /activatedBackgroundIndicator

Пример

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal"
   android:background="?android:attr/activatedBackgroundIndicator">

     <!-- your item content-->

</LinearLayout> 

Ответ 3

Лучше всего в вашей теме,  @Вытяжка/list_selector

list_selector.xml:

<!-- <item android:drawable="@color/android:transparent"  android:state_selected="true" /> -->
<item android:drawable="@color/list_bg" android:state_selected="true"/>
<item android:drawable="@color/list_bg" android:state_activated="true"/>
<item android:drawable="@color/transparent"/>

затем установите фон для root из вашего list_row.xml android: background = "? android: attr/activatedBackgroundIndicator"

Ответ 4

Попробуйте это в onListItemClick

view.getFocusables(POSITION);
view.setSelected(true);

Он выделяет выделение.