Событие списка состояний цвета не инициировано или не обработано

Я последовал этому ответу: стиль фона выбранного элемента темы NavigationView и этот: Android - Цвет фона меню элемента навигации "Просмотр"

Рассмотрим этот вид навигации. Он использует список состояний цвета color_state_menu.

<android.support.design.widget.NavigationView
    app:itemBackground="@color/color_state_menu"
    android:id="@+id/navigation_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_view">

Этот список состояний цвета определен ниже:

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

... таким образом, чтобы текущий используемый пункт меню имел красный фон, а остальные - серый.

Однако все эти пункты меню всегда имеют серый фон. Ты знаешь почему?


person JarsOfJam-Scheduler    schedule 04.11.2018    source источник
comment
Вы также пробовали с state_checked вот так ‹item android:state_checked=true android:drawable=@color/colorRoyalRed /› ?   -  person Cata    schedule 04.11.2018
comment
Да я тоже пробовал   -  person JarsOfJam-Scheduler    schedule 04.11.2018
comment
Когда я нажимаю на элемент меню, соответствующий фрагмент загружается, а фон выбранного элемента меню не изменяется.   -  person JarsOfJam-Scheduler    schedule 04.11.2018


Ответы (1)


Вам нужно сделать несколько вещей:

  1. Используйте DrawableStateList вместо ColorStateList - просто переместите color_state_menu.xml в папку drawable и измените

    app:itemBackground="@color/color_state_menu"
    

    to

    app:itemBackground="@drawable/color_state_menu"
    
  2. Используйте android:state_checked вместо android:state_activated:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/colorRoyalRed" android:state_checked="true" />
        <item android:drawable="@color/gray" />
    </selector>
    
  3. Добавьте android:checkable="true" к каждому пункту меню в drawer_view.xml

person Alexey Denysenko    schedule 04.11.2018
comment
Я не подумал сделать элементы проверяемыми. Таким образом, я просто попытался вызвать setCheckable(true) в обработчике OnItemClickListener представления навигации, после чего я сохранил свой вызов setChecked(true), и он работает! Благодарю вас! Обратите внимание, что color_state_menu.xml можно сохранить как в каталоги res/color, так и в каталоги res/drawable (это не имеет значения). Наконец, state_checked кажется действительно хорошим состоянием (я не пробовал с state_activated). - person JarsOfJam-Scheduler; 05.11.2018