2015-04-06 60 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; 
    } 
}