2012-04-25 68 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一个项目..