2

我有 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));
     }
});
4

6 回答 6

3

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

于 2013-08-07T12:14:29.167 回答
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;

}
于 2013-08-07T12:13:54.480 回答
0

you need to pass color by setting a drawable in the background of the textview and then pass that textview on the listview to show different colours of the items depending on the state of the item. You can refer to this link for more details : http://arshad-parwez.blogspot.in/2012/07/listview-item-highlight-when-item-is.html

于 2013-08-07T13:42:33.227 回答
0

替换这一行

TextView tv = (TextView) view;

像这样

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

R.id.textView是您的文本视图 ID。

于 2013-08-07T12:13:31.637 回答
0

您可以使用在 ListView 的父类 (AbsListView) 中定义的listSelector 属性:

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

于 2018-07-12T01:01:29.890 回答
-2

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

switch(position)
{
   case 1:
      tv.setBackgroundColor(Color.argb(125,75,236,90));
      break;
.
.
.
}
于 2013-08-07T12:15:52.470 回答