Android:ListView无法正常工作

时间:2012-04-25 17:54:31

标签: android listview

每当点击列表中的任何项目时,我都会尝试更改listview中的背景颜色。

    listView.setOnItemClickListener(new OnItemClickListener() {

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

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

但是,这段代码没有按预期工作。它表现不稳定。有时,它会同时更改两个项目的背景,如果我向下拖动列表,则会重置已经更改的颜色项。

有人可以帮我吗?

THX! 拉胡

2 个答案:

答案 0 :(得分:1)

在代码中使用它,

将此xml文件放在drawable文件夹中(您可以根据需要更改颜色)。

<强> 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" />

答案 1 :(得分:0)

这种情况正在发生,因为列表视图(行)的项目将被回收用于性能改进...如果视图不在屏幕中...那么而不是为下一个元素创建新视图..前一个视图显示使用新内容...所以你应该跟踪你要更改颜色的项目... You can see this example... I think it helps ...他正在使用一个视图类...来管理数据..你可以把colcour的变量也..并检查项目的背景颜色..