2013-08-07 60 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; 
. 
. 
. 
}