如何更改列表视图特定项目的颜色?

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-方法更改为:

public View getView(int position, View convertView, ViewGroup parent) ViewHolder 持有者 = null; RowItem rowItem = getItem(position); LayoutInflater mInflater = (LayoutInflater) 上下文 .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); if (convertView == null) convertView = mInflater.inflate(R.layout.hemistich_rows, null); 持有人 = 新的 ViewHolder(); holder.firstHemistich = (TextView) 转换视图 .findViewById(R.id.title); holder.SecondHemistich = (TextView) 转换视图 .findViewById(R.id.desc); convertView.setTag(holder); 别的 持有人 = (ViewHolder) convertView.getTag(); holder.firstHemistich.setText(rowItem.getTitle()); holder.SecondHemistich.setText(rowItem.getDesc()); // 改变项目的颜色 if (yourValueHere) holder.SecondHemistich.setTextColor(yourColor); 返回转换视图;

更改 yourValueHere 和 yourColor... 这将根据 yourValueHere 的值为每个项目着色。

【讨论】:

【参考方案3】:

也许更好的办法是阅读一点关于 android Adapters Reference

getView 方法基本上像 forforeach 一样工作,并为您可以根据需要修改的数组或列表中的每个项目返回 View 对象,您只需要做getView() 方法中的任何必要更改关于更改颜色,您可以从已经膨胀的 convertView 获取主布局容器并根据需要更改其背景颜色属性

【讨论】:

以上是关于如何更改列表视图特定项目的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改选定的列表视图项目颜色

在点击其各自的父项(列表视图的项目)后,如何更改标签的文本颜色?

如何在 Sqlite 数据库中的特定数据上更改 Listview 中的行颜色

ListView:如何从列表中访问视图以更改背景颜色?

列表视图滚动更改项目视图的背景颜色(简单适配器)

按下按钮时更改列表视图背景颜色