我在android listview&gridview上遇到了一个奇怪的问题
我有一个包含100个项目的列表视图,这个xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/main_screen">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/icon_1"
android:onClick="changeIcon" />
</RelativeLayout>
</RelativeLayout>
public void changeIcon(View view) {
ImageView myIcon= (ImageView)view.findViewById(R.id.icon);
myIcon.setImageResource(R.drawable.icon_2);
}
如果我点击列表上的第一个图标,它确实会替换我触摸过的图标(这是我想要的),但是,它也会替换视图外的图标,不是全部,而是按顺序发生的。。
所以在这些照片中,1是我触摸选择的,13,25,37等等。。已自动选择。。当我快速向上滚动时,#1上的图标会随机变化。有时是2或3。。
同样的问题也发生在gridview上。。
有人能解释一下这种行为吗?我能做些什么来避免这个。。
链接到屏幕截图:http://imgur.com/a/5pfma
图1为空列表,图2为我点击图标#1,图3为我触摸#1也改变了13,
1条答案
按热度按时间kx5bkwkv1#
问题是listview在滚动后会重新使用视图。
您应该独立地保存每个列表项的状态。这应该在自定义适配器中完成。