Android ListView элемент мигает при выборе - PullRequest
3 голосов
/ 12 мая 2011

Я создаю собственный ListView, как показано ниже

Основной макет

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">

    <ListView android:id="@+id/listview"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:layout_margin="3dip"  
    android:fadingEdge="none"
    android:soundEffectsEnabled="true"       
    android:clickable="true"                
    android:scrollbars="none"
    android:divider="#ffcccccc"
    android:dividerHeight="1dip"                
    android:layout_weight="1"/>
</LinearLayout>

Пользовательский ListView

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/sellistitem">  
  <TextView
   android:id="@+id/ListItem"       
   android:layout_width="wrap_content"
   android:layout_height="30dip"
   android:layout_margin="1dip"             
   android:textColor="@color/BLACK"
   android:gravity="center_vertical"
   android:layout_alignParentLeft="true"
   android:layout_alignParentTop="true" 
   android:padding="5dip"/>           
</RelativeLayout>

и селектор, как показано ниже

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/BLUE" /> 
<item android:drawable="@drawable/WHITE" /> 
</selector> 

Drawable

 <resources>
    <drawable name="WHITE">#ffffff</drawable>
    <drawable name="BLUE">#ff0033cc</drawable>
 </resources>

Сделав это, часть выбора работает нормально.Однако, когда я нажимаю на любой элемент, выбранный элемент мигает два раза, прежде чем фактически становится синим.Он не меняется на синий напрямую, как должно.Как убрать этот мигающий эффект?

С уважением,

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

Селекторы хитрые, в общем. Попробуйте вместо этого свой селектор:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true" 
        android:state_enabled="true"
        android:drawable="@drawable/selected_background" />
  <item android:state_focused="false" 
        android:state_pressed="false" 
        android:state_selected="false"
        android:state_checked="false" 
        android:state_enabled="true" 
        android:state_checkable="false"
        android:drawable="@drawable/normal_background"/>
</selector>

Обратите внимание, что android:drawable attribute не должен быть отрисованным. Если это простой цвет, вы можете ссылаться на него в формате @color/background_color.

EDIT:

Хорошо, эти белые и синие "рисованные элементы" - это не элементы для рисования, а просто цвета, лучше их определить в colors.xml. Возможно, это и есть причина мерцания.

<resources>
    <color name="blue">#ff0033cc</color>
    <color name="white">#ffffff</color>
</resources>
0 голосов
/ 12 мая 2011

попробуйте android:cacheColorHint="#00000000" до listview

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