如何更改Listview中特定项目的颜色?

4

I have a customlistadapter as follow:

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中的数据库值更改列表视图项的颜色,但我不知道如何做。你有什么好的想法吗?如果我的问题有误,请告诉我,不要扣分。


将 Simple Plan 的答案放入你的 getView 方法中。 - Padma Kumar
3个回答

2

试试这个

if(position == 3){
        holder.SecondHemistich.setTextColor(this.context.getResources().getColor(R.color.color1));
}   

我使用了你的答案,但它会将第三个位置和其他一些位置随机着色,我该如何控制它? - user3266062
我运行了你的代码,它正常工作。我认为你需要在这个页面上进行更多的定制。 - Shini
你是对的,但代码的另一部分只是为了更改字体而已。我只是用.setTextColor(Color.RED);代替了你的代码,并将其放在返回语句的顶部。 - user3266062
1
如果您仍然遇到随机行着色问题,那是因为位置参数是在重绘时当前视图中的位置,所以如果您正在滚动,则position == 3将成为不同的行。我使用底层数据对象(例如数组列表)来保存我的数据,并使用其中的位置来定义颜色。这样它们就不会随着滚动而改变。我的解决方案使用myGlobalArray.get(position).getPosition()。 - Gravitoid
感谢Gravitoid的回答,昨天我观察了位置显示的数字,这些数字取决于滚动的方式。也就是说,如果您向上移动,则在顶部显示第一行,反之亦然。但是,我无法清楚地理解您的意思并相应更改我的代码。 - user3266062

0

也许更好的方式是阅读一些关于Android适配器的参考资料参考

基本上,getView方法的工作方式就像forforeach,并为数组或列表中的每个项目返回View对象,您可以根据需要进行修改,只需在getView()方法内进行任何必要的更改。

关于更改颜色,您可以从已经充气的convertView中获取主布局容器,并根据需要更改其背景颜色属性


0

更改您的getView方法如下:

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());
// 改变项目颜色 if (yourValueHere) { holder.SecondHemistich.setTextColor(yourColor); }
return convertView; }

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接