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

Отображение текущего выбора в списке

Как видно из версии планшета gmail и google talk, я пытаюсь показать текущий выбор в списке. Я знаю, что это не стандартная практика, и ее следует избегать, когда это необходимо. В моей программе список всегда присутствует на экране, а нажатый элемент показывает новый фрагмент справа (аналогично gmail и google talk).

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

как я могу это достичь?

это мой селектор xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/list_item_bg2" android:state_pressed="false" android:state_selected="false"
    android:state_focused="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false"
    android:state_selected="true" android:state_checked="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="true"
    android:state_selected="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false"
    android:state_selected="false" android:state_checked="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true" android:state_focused="true"
    android:state_selected="true" android:state_checked="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/>



</selector> 
4b9b3361

Ответ 1

В Gmail и подобных приложениях используется состояние activated с соответствующим расположением строк. См:

В двух словах вы:

  • Используйте макет строки с активированным фоном (например, android.R.layout.simple_list_item_activated_1)
  • Используйте setChoiceMode(ListView.CHOICE_MODE_SINGLE) на ListView
  • "Проверьте" строку, которая должна быть активирована с помощью setItemChecked() на вашем ListView, чтобы включить "активированное" состояние и иметь постоянную подсветку

Ответ 2

Другой вариант - установить фон вашего настраиваемого элемента списка на андроид: фон = "? android: attr/activatedBackgroundIndicator"

Ответ 3

Если вы используете пользовательский макет для каждой строки:

  • создать селектор с андроид: state_activated = "true"
  • примените его как фон пользовательского макета.

пример извлекаемого селектора:

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

Ответ 4

Что сработало для меня

  • переопределяет глобальный стиль ListView в вашей теме

    <item name="android:listViewStyle">@style/MyListView</item>

  • Определите свой стиль

    <style name="MyListView" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@drawable/listview_background_selector</item> </style>

  • определить селектор listview_background_selector.xml

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> <item android:drawable="@color/ListViewBackGroundColorPressed" android:state_activated="true" /> </selector>

  • установите фон в вашем представлении list-item-layout

    android:background="?android:attr/activatedBackgroundIndicator"