2015-04-06 61 views
0

有一个用于扩展ListFragment的自定义适配器。列表的每一行都是左侧的ImageView和右侧的TextView。单击图像时,ImageView应将其背景更改为不同的图像。我实现了这种方式:在列表视图中更改单击的imageview背景

public class MyAdapter extends BaseAdapter{ 
... 
@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // context.firstViewItem = position; 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.row_layout, 
        null); 
      viewHolder = new ViewHolder(); 
      viewHolder.likeBtn = (ImageView)convertView.findViewById(R.id.likeBtn); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
      viewHolder.likeBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       view.setBackgroundResource(R.drawable.abc_btn_rating_star_on_mtrl_alpha); 

       } 
      }); 
     } 
     return convertView; 
    } 
} 

但问题是,这不仅ImageView的背景的变化,但在列表视图变化的第三或第四排的每个ImageView的。我怎样才能改变点击的ImageView的背景?

回答

0

添加一些像这样的代码在你的MainActivity

  viewHolder.likeBtn.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 

     if(position==R.id.IMAGE_1){ 
     view.setBackgroundResource(R.drawable.background_1); 
     } 
    else if(position==R.id.IMAGE_2){ 
    view.setBackgroundResource(R.drawable.background_2); 
    } 
    } 
}); 

这里R.id.IMAGE_1是在XML文件中的ImageView的ID。

+0

护理细说R.id.IMAGE_1? – Nazerke 2015-04-06 11:04:38

+0

它是您的图像视图ID,位于xml文件中 – AndroidHacker 2015-04-06 11:05:48

0

可能存在问题相对于行元素的标记,以便更喜欢因为当滚动发生,再循环回收的第一行 元素以使用viewholder实例每次

并显示新行。因此,在滚动场景中,onClickListener可能会被分配到特定的 索引处新排列的行。

为了避免这种情况,我们应该使用标签和查看持有者

public class MyAdapter extends BaseAdapter{ 
... 
@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // context.firstViewItem = position; 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.row_layout, 
        null); 
      viewHolder = new ViewHolder(); 
      viewHolder.likeBtn = (ImageView)convertView.findViewById(R.id.likeBtn); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
      viewHolder.likeBtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       viewHolder.likeBtn.setBackgroundResource(R.drawable.abc_btn_rating_star_on_mtrl_alpha); 
// this should solve your problem 
       } 
      }); 
     } 
     return convertView; 
    } 
}