2012-04-25 53 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> 

在主佈局使用列表視圖與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

這是因爲發生了一個列表視圖(行)的項目將被回收的性能改進...如果視圖不在屏幕中,則不是爲下一個元素創建新視圖。先前視圖顯示爲新內容...因此,您應該跟蹤要更改顏色的項目ur ... You can see this example... I think it helps ...那裏他使用的是一個viewholder類..管理數據..你可以把一個變量colcour也..並檢查背景colour..of一個項目..