【发布时间】:2011-07-06 13:50:36
【问题描述】:
我在设置 ListView 项目内的 ImageView 源时遇到问题。问题如下:
在 ListItems 的 XML LayoutFile 中,我有一个 ImageView 和一个 TextView:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:paddingLeft="10dp"
android:orientation="horizontal">
<ImageView android:id="@+id/actionState"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_gravity="center_vertical"
android:src="@drawable/check_lightgrey"
android:layout_marginRight="5dp"/>
<TextView android:id="@+id/actionText"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingTop="5dp"
android:paddingBottom="5dp"
/>
</LinearLayout>
在我的 res/drawable 文件夹中,我有两个文件 check_lightgrey.png 和 check_green.png。使用 ArrayAdapter 绘制 ListView,每个 ListItem 都由 check_lightgrey.png 和相应的文本组成,效果很好。
当用户点击一个 ListItem 时,我想将这个 ListItem 的 ImageView 的来源从 check_lightgrey.png 更改为 check_green.png
我的 ListActivity 中的 setOnItemClickListener 的代码如下所示:
ListView listView = getListView();
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ImageView imageView = (ImageView) v.findViewById(R.id.actionState);
imageView.setImageResource(R.drawable.check_green);
}
});
只要列表没有太满以至于需要滚动,它就可以正常工作。如果有那么多ListItem需要滚动,那么点击一个ListItem时就会出现bug:不仅设置了点击的ListItem中ImageView的来源,而且还设置了不可见的ListItem的ImageView的来源,因为他们不在当前视图中。
这听起来有点混乱,但我举个例子:
- 列表视图中有 56 个项目
- 无需滚动即可看到前 13 个项目
- 现在单击第 1 项 -> ImageView 的源更改为方面
- 现在向下滚动之前不可见的第二个项目(项目 15)的 ImageView 的源也已更改
- 第 29 项和第 43 项也是如此
- 如您所见,始终存在 14 的差异
将设备的方向更改为横向时也会产生相同的效果。唯一改变的是 7 的差异。
我搜索了一个结论,但没有找到任何东西。因此,如果有人可以帮助我或给我提示,那就太好了。
问候
【问题讨论】:
标签: android