【问题标题】: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 方法中。

标签: android listview android-listview android-arrayadapter


【解决方案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 获取主布局容器并根据需要更改其背景颜色属性

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-19
      相关资源
      最近更新 更多