0

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

    listView.setOnItemClickListener(new OnItemClickListener() {

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

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

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

有人能帮我一下吗?

谢谢!拉胡尔

4

2 回答 2

1

在代码中使用它,

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

列表选择器.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>

在您的主布局中使用 listviewandroid: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" />
于 2012-04-25T17:59:36.060 回答
0

发生这种情况是因为列表视图(行)的项目将被回收以提高性能...如果视图不在屏幕中..那么而不是为下一个元素创建新视图..以前的视图显示新内容...因此您应该跟踪要更改颜色的项目...您可以查看此示例...我认为这会有所帮助...他正在使用查看器类...来管理数据。 . 你也可以为 colcour 设置一个变量.. 并检查一个项目的背景颜色..

于 2012-04-25T18:03:08.787 回答