我有一个listview,点击后我尝试更改listview适配器行中的箭头图像。 这工作正常,但我有问题,不仅单个图像更改。箭头图像上方和下方的几行也会发生变化。
它会改变每第6行的图像。
我的onClick事件的代码是:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view, int position, long id) {
if (row != null)
{
ImageView PfeilImage = (ImageView) row.findViewById(R.id.imageView1);
PfeilImage.setImageResource(R.drawable.pfeil);
}
ImageView PfeilImage2 = (ImageView) view.findViewById(R.id.imageView1);
PfeilImage2.setImageResource(R.drawable.pfeil_aktiv);
row = view;
getInfoById(position);
}
});
如果有人可以帮我解决这个问题,那就太好了。
提前谢谢 弗兰克答案 0 :(得分:0)
这对于ListView的设置实际上是正常的,因为它被设计为不重新膨胀视图,而是重新使用它们;这就是为什么你不能只改变图像,你需要改变它所指向的数据。
在Adapter的getView()方法中解决这个问题的方法是检查数据并根据它设置背景图像。
您可能需要创建一个新类来保存当前数据,并创建新图像以使用holder。即
Class ListViewItem
-int imageToUse
-Object whateverDataYouWereOriginallyUsing
然后根据ListViewItem.get(position)设置该视图的图像.imageToUse
现在,当您实际根据用户点击更改数据时,您需要在适配器上调用notifyDataSetChanged(),以便它将根据新的DataSet和您的getView()重新评估UI方法
答案 1 :(得分:0)
得到了,非常感谢。
在我的Adapter类中,我创建了一个新的int变量“myClickedPosition”。
在我的点击事件中,我设置了这个变量,之后我设置了notifyDataSetInvalid来重绘listview:
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> theAdapter,View view, int position, long id) {
LazyAdapter mAdapter = (LazyAdapter) theAdapter.getAdapter();
mAdapter.myClickedPosition=position;
mAdapter.notifyDataSetInvalidated();
getInfoById(position);
}
});
在我的getView函数中,我检查点击的位置:
if(myClickedPosition == position)
{
PfeilIcon.setImageResource(R.drawable.pfeil_aktiv);
} else {
PfeilIcon.setImageResource(R.drawable.pfeil);
}
现在一切正常。