2012-04-25 5 views
0

Я пытаюсь изменить цвет фона в своем списке при каждом щелчке по любому элементу в списке.Android: ListView не работает должным образом

listView.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, int pos, 
       long arg3) { 

       listView.getChildAt(pos).setBackgroundResource(R.color.GREY); 
     } 
    }); 

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

Может ли кто-нибудь помочь мне здесь?

Thx! Рахул

ответ

1

Используйте это в коде,

поместить этот XML-файл в папке вытяжке (вы будете менять цвет по вашему желанию).

listselector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
      android:constantSize="true"> 

    <item android:state_focused="false" android:state_pressed="false"> 

    <shape android:shape="rectangle"> 
    <solid android:color="@android:color/transparent"/> 

    <stroke android:width="2dp" android:color="@android:color/transparent" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 

    <item android:state_focused="true" android:state_pressed="false"> 

    <shape android:shape="rectangle"> 

    <solid android:color="@color/listitemfocus"/> 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 

    <item android:state_pressed="true"> 

    <shape android:shape="rectangle"> 

    <solid android:color="@color/listitempress"/> 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <padding android:left="1dp" android:top="1dp" android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 

</selector> 

в основной макет использования ListView с android:listSelector:

<ListView 
       android:id="@+id/listView1" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_below="@+id/parent_image_view" 
       android:layout_centerHorizontal="true" 
       android:cacheColorHint="@android:color/transparent" 
       android:listSelector="@drawable/listselector" 
       android:scrollbars="none" /> 
0

Это происходит потому, что предметы в виде списка (Rows) будут переработаны для повышения производительности ... если вид не на экране ... тогда вместо создания нового представления для следующего элемента .. предыдущее представление отображается с новым контентом ... так что вы должны отслеживать элементы, для которых вы меняете цвет ur ... You can see this example... I think it helps ... там он использует класс зрителя .. для управления данными .. u может поместить переменную для colcour также .. и проверить цвет фона .. элемента.

Смежные вопросы