2013-08-07 95 views
2

我有ListVIew,我想改變項目的背景,當我點擊它時,顯示它被選中。但是,當我使用此代碼(在文本下)時,它會每13項背景顏色改變一次。例如:如果我選擇1個項目並向下滾動,它將改變每個13項目的顏色(1-13-26 ..)。並且我只想爲一個項目更改背景。Android:ListVIew:改變背景onClick

lvpl.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView tv = (TextView) view 
      tv.setBackgroundColor(Color.argb(125,75,236,90)); 
      final_ids.add(ids.get(position)); 
    } 
}); 
+1

您可以使用選擇器。你使用自定義適配器嗎? – Raghunandan

+0

'final_ids'是什麼?它是lvpl的成員(這是什麼?)或者它是一個包絡佈局? – g00dy

回答

2

問題是,您的適配器列表正在重新使用移出屏幕的視圖。

解決的辦法是設置默認顏色適配器用於其他意見

public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) convertView.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     = inflater.inflate(
       R.layout.your_list_item, null); 

    } 
if(postion!=SelectedPosition) 
    { 
    convertView.setBackgroundColor(default Color); 
    } 
    else 
    { 
    convertView.setBackgroundColor(Color.argb(125,75,236,90)); 
    } 



    return convertView; 

} 
+2

如何在這裏獲得'SelectedPosition'? – Nezam

0

替換該行

TextView tv = (TextView) view; 

與成才這樣

TextView tv = (TextView) view.findViewById(R.id.textView); 

這裏R.id.textView是您在文本視圖id。

3

您必須設置在適配器的所有項目的背景顏色。 爲所有行設置一些默認顏色,然後將顏色應用於點擊的行。 但是,當您更改點擊行的顏色時,請確保其他行的顏色是您的默認顏色。 然後從適配器調用notifydatasetchanged()。

-2

您必須使用(int position)參數進行匹配。

switch(position) 
{ 
    case 1: 
     tv.setBackgroundColor(Color.argb(125,75,236,90)); 
     break; 
. 
. 
. 
}