Android列表视图通过单击切换图像,更改多个图像

时间:2013-06-04 18:12:30

标签: android image listview

我有一个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);
     }
  });

如果有人可以帮我解决这个问题,那就太好了。

提前谢谢 弗兰克

2 个答案:

答案 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);
 }

现在一切正常。