Android List Посмотреть, как изменить фон выбранного элемента

Я попрошу о помощи по следующей проблеме. Очень странно для меня:) Я пытаюсь изменить фон выбранного элемента в ListView. Я установил пункт выбран следующим образом.

drawer_home.setItemChecked(0, true);

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

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

android:background="@android:color/white"
android:listSelector="@drawable/listview_selector"

То, что я пытался изменить, это стили на тему, и результат тот же. Все в порядке, кроме выбранного пункта:(

2 ответа

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

Сначала посмотрите что-то так просто.

Так что я поделюсь своим опытом, надеюсь, сэкономить TimF другого человека:) Вы можете просто использовать.

drawer_home.getChildAt(0).setBackgroundColor(Color.RED);

или же

drawer_home.getChildAt(drawer_home.getSelectedItemPosition()).setBackgroundColor(Color.RED);

Но только если элемент в ListView является статическим.

И до того, как я встретил это решение, но потому что динамически изменять элементы ListView с ArrayAdapter.

drawer_home.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_activated_1, home_menu_title));

Это дает мне ошибку. Потому что очевидно, что контент еще не загружен. Тогда используйте следующее.

drawer_home.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
                               int oldTop, int oldRight, int oldBottom) {
        // TODO Auto-generated method stub
        if(menuType == MENU_TYPE_HOME && currentPosition == 0) {
            drawer_home.getChildAt(0).setBackgroundColor(0xCC4d4dff);
        }
    }
});

У меня нет большого опыта работы с Android, так что, вероятно, это не идеальное решение.

Я буду рад лучшему решению.

Попробуйте добавить

<item android:state_activated="true" android:drawable="@android:color/holo_blue_light"/>
Другие вопросы по тегам