Android:ListVIew:更改背景onClick

时间:2013-08-07 12:05:32

标签: android background android-listview onclicklistener

我有ListVIew,我想在点击它时更改项目的背景,以显示它已被选中。但是,当我使用此代码(在文本下)时,它会更改每13项背景颜色。例如:如果我选择1项并向下滚动它将改变每个13项的颜色(1-13-26 ..)。我想仅为一个项目更改背景。

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));
     }
});

6 个答案:

答案 0 :(得分:3)

您必须为适配器中的所有项目设置背景颜色。 为所有行设置一些默认颜色,然后将颜色应用于单击的行。 但是当您更改单击行的颜色时,请确保其他行的颜色是您的默认颜色。 然后从你的适配器调用notifydatasetchanged()。

答案 1 :(得分: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 :(得分:0)

替换此行

TextView tv = (TextView) view;

有这样的东西

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

此处R.id.textView是您的文字视图ID。

答案 3 :(得分:0)

您需要通过在textview的背景中设置drawable来传递颜色,然后在listview上传递该textview,以根据项目的状态显示项目的不同颜色。您可以参考此链接了解更多详情: http://arshad-parwez.blogspot.in/2012/07/listview-item-highlight-when-item-is.html

答案 4 :(得分:0)

您可以使用listSelector property,它是在ListView的父类(AbsListView)中定义的:

<ListView
    android:id="@+id/rd_playlist"       
    android:listSelector="@color/colorCoral"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>

您还可以使用setSelector(..)功能以编程方式设置颜色:

  

lvp1.setSelector(Color.argb(125,75,236,90));

答案 5 :(得分:-2)

您必须使用(int position)参数进行匹配。

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