Выделение выделенного элемента в списке в андроиде
У меня есть 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]);
Ответы
Ответ 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);
Он выделяет выделение.