我有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));
}
});
答案 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;
.
.
.
}