Android ListView с пользовательским селектором списка, вызывающим проблему Flickring - PullRequest
1 голос
/ 09 апреля 2010

Я устанавливаю файл selector.xml в селектор ListView:

<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 перестает выделяться. эта вещь не происходит, когда используется селектор по умолчанию ... что не так с этим селектором.

Я даже добавил android: cacheColorHint = "# 00000000", как и некоторые другие блоги.

1 Ответ

0 голосов
/ 20 сентября 2011

Недавно я тоже столкнулся с этой проблемой и нашел решение, проанализировав исходный код 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" />

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...