需求很简单,在listview中 先给item的imageview设置了一张图片A,设置点击事件在onclick方法中更换成另一一张图片B,但是点击后没有效果,打印log看到已经调用了该方法。holder.bus_icon.setImageResource(R.drawable.bus_blue);
holder.bus_icon.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.i("i", "点击图标了+test11" + position);
holder.bus_icon.setImageResource(R.drawable.bus_red);
adapter.notifyDataSetChanged();
}
});

解决方案 »

  1.   

    你的这个holder.bus_icon.是什么?
    一般不都是onItemClickListenter么
    然后通过switch(position)来判断点击事件啊。
    水平不高,没看明白你的代码。。
      

  2.   

    holder.bus_icon 就是一个imageview, 这个图标是在listview中的,所以用了viewHolder类来优化
      

  3.   

    你的onClick事件监听到了,但问题是你onClick事件的逻辑处理。 adapter.notifyDataSetChanged();   ListView会重写调用getView显示每个Item。 所以显示依旧为R.drawable.bus_blue。如果想要更新,建议添加一个字段进行判断到底显示哪个图片。
      

  4.   

    你不应该调用 adapter.notifyDataSetChanged(),然后再看看。
      

  5.   

     adapter.notifyDataSetChanged();
     这个导致ListView重新刷新了,所以图片还是原来的图片,没变
      

  6.   

    // 图标
    if (isblue) {
    bus_icon.setImageResource(R.drawable.bus_blue);
    } else {
    Log.i("i", "变色了" + isblue);
    bus_icon.setImageResource(R.drawable.bus_red);
    }
    bus_icon.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    Log.i("i", "点击图标了+test11");
    isblue = false;
    adapter.notifyDataSetChanged();
    }
    }); 不刷新adapter也不行,又换了种方式感觉没什么问题啊
      

  7.   

    以上代码是在adapter 的getview方法中写的
      

  8.   

    移除adapter.notifyDataSetChanged(),调用holder.bus_icon.invalidate();或者
    @Override
                    public void onClick(View v) {
                        Log.i("i", "点击图标了+test11" + position);
                        ImageView iv = (ImageView)v;
                        iv.setImageResource(R.drawable.bus_red);
                    }