如何更改列表视图特定项目的颜色?
Posted
技术标签:
【中文标题】如何更改列表视图特定项目的颜色?【英文标题】:How change color of specific item of listview? 【发布时间】:2014-07-08 11:06:10 【问题描述】:我有一个如下的自定义列表适配器:
public class CustomListViewAdapter2 extends ArrayAdapter<RowItem>
List<Integer> baseOnThis;
public CustomListViewAdapter2(Context context, int resourceId,
List<RowItem> items, ArrayList<Integer> ids)
super(context, resourceId, items);
this.context = context;
baseOnThis= ids;
/* private view holder class */
private class ViewHolder
TextView firstHemistich;
TextView SecondHemistich;
public View getView(int position, View convertView, ViewGroup parent)
ViewHolder holder = null;
RowItem rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = mInflater.inflate(R.layout.hemistich_rows, null);
holder = new ViewHolder();
holder.firstHemistich = (TextView) convertView
.findViewById(R.id.title);
holder.SecondHemistich = (TextView) convertView
.findViewById(R.id.desc);
convertView.setTag(holder);
else
holder = (ViewHolder) convertView.getTag();
holder.firstHemistich.setText(rowItem.getTitle());
holder.SecondHemistich.setText(rowItem.getDesc());
return convertView;
现在我需要根据保存在“baseOnThis”的 Arraylist 上的数据库值来更改 listview 项目的颜色,但我不能。有什么想法我应该怎么做? 如果我的问题是错误的,请告诉我,不要减去我
【问题讨论】:
将简单计划答案放入您的 getView 方法中。 【参考方案1】:试试这个
if(position == 3)
holder.SecondHemistich.setTextColor(this.context.getResources().getColor(R.color.color1));
【讨论】:
我用了你的答案,但它给第三个位置和某个位置随机着色,我应该如何控制它? 我运行您的代码,它工作正常。我认为您在此页面上自定义了更多内容。 你是对的,但代码的另一部分只是为了改变字体工作。我只是把 .setTextColor(Color.RED);将您的代码放入状态并将其放在返回的顶部 如果你仍然得到随机的行着色,那是因为位置参数是当前视图在重绘时的位置,所以如果你滚动位置 == 3 将是不同的行你滚动。我使用底层数据对象(例如数组列表)来保存我的数据和其中的位置来定义颜色。这样他们就不会随着滚动而改变。我的解决方案使用 myGlobalArray.get(position).getPosition()。 感谢 Gravitoid 的回答,昨天我看那个位置显示的数字,数字取决于滚动方式。意味着如果你向上移动显示第一行在顶部和版本。但是我无法清楚地理解您的意思并据此更改我的代码。【参考方案2】:将您的getView
-方法更改为:
更改 yourValueHere 和 yourColor... 这将根据 yourValueHere 的值为每个项目着色。
【讨论】:
【参考方案3】:也许更好的办法是阅读一点关于 android Adapters Reference
getView 方法基本上像 for 或 foreach 一样工作,并为您可以根据需要修改的数组或列表中的每个项目返回 View 对象,您只需要做getView() 方法中的任何必要更改关于更改颜色,您可以从已经膨胀的 convertView 获取主布局容器并根据需要更改其背景颜色属性
【讨论】:
以上是关于如何更改列表视图特定项目的颜色?的主要内容,如果未能解决你的问题,请参考以下文章
在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?