2010-04-09 2 views
1

я устанавливаю selector.xml к ListView Selector:Android ListView с Настраиваемый список выбора вызывает проблемы Flickring

<item android:state_focused="false" android:state_selected="true" 
    android:state_pressed="true" android:drawable="@drawable/timeline_selected_rect"/> 

<item android:state_focused="false" android:state_selected="true" 
    android:state_pressed="false" android:drawable="@drawable/timeline_selected_rect"/> 

<item android:state_focused="true" android:state_selected="true" 
    android:state_pressed="true" android:drawable="@drawable/timeline_selected_rect"/> 

но установка это вызывает TextView над Flickr выбор. эта вещь не происходит, когда используется селектор по умолчанию ... что не так с этим селектором.

Я даже добавил android: cacheColorHint = "# 00000000", как предоставил информацию в некоторых других блогах.

+0

Вы перерабатываете виды в ListView? –

+0

Что означает повторное использование вида. –

+0

Я не делаю что-либо еще с Cell над выбором в настоящее время. –

ответ

0

Я недавно столкнулся с этой проблемой и нашел решение, проанализировав исходный код Android.

Вам необходимо удалить атрибуты android:state_selected="true", так как убедитесь, что состояние не используется. Когда элемент списка теряет фокус, он также делает «selected = false». Поскольку focus=false & selected=true никогда не произойдет, ваши первые 2 <items> в селекторе никогда не будут показаны.

Подумайте о кране, как щелчок мышью, с событием onPressDown и onPressUp. Так что ваш новый selector.xml должен выглядеть примерно так, чтобы избежать мерцания:

<!-- {comment copied directly from Android source code} 
    Even though these two point to the same resource, have two states 
    so the drawable will invalidate itself when coming out of pressed state. 
--> 
<item android:state_pressed="true" android:state_focused="true" 
    android:drawable="@drawable/timeline_selected_rect"/> 
<item android:state_pressed="true" android:state_focused="false" 
    android:drawable="@drawable/timeline_selected_rect" /> 

<item android:state_focused="true" 
    android:drawable="@drawable/timeline_selected_rect" /> 

<item android:state_window_focused="false" 
    android:drawable="@android:color/transparent" /> 

Как и в стороне, вы должны серьезно рассмотреть вопрос о создании отдельной вытяжки для прессованного состояния, так что вы даете немногих визуальной обратной связь. Всегда лучше видеть, что «что-то происходит» при взаимодействии с пользовательским интерфейсом; независимо от того, рисует ли кнопка в состоянии «вниз», когда она нажимается или слегка меняет цвет при нажатии на элемент списка, визуальная обратная связь является хорошей практикой.