0

是否可以为(动态)ListView 中的不同行设置不同的颜色?

我知道我可以设置背景颜色,例如在项目单击事件侦听器上,但我想知道有没有办法在向适配器添加项目时动态设置颜色?

不好吗?

itemAdapter = new ArrayAdapter<Bundle>(this, android.R.layout.simple_list_item_1, itemArray) {
         @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View row;
                LayoutInflater inflater = (LayoutInflater)getSystemService
                  (Context.LAYOUT_INFLATER_SERVICE);

                if (null == convertView) {
                    row = inflater.inflate(android.R.layout.simple_list_item_1, null);
                } else {
                    row = convertView;
                }

                row.setBackgroundColor(getItem(position).getInt("color"));
                TextView tv = (TextView) row.findViewById(android.R.id.text1);
                tv.setText(getItem(position).getString("text"));

                return row;
            }
     };
4

1 回答 1

2

您必须编写自己的自定义 ListAdapter。如果您的数据是数组或 ArrayList,您可以简单地扩展 ArrayAdapter,并覆盖该getView()方法。编写实现有很多答案getView(),但您的特定问题的基本答案是您需要添加一些逻辑:

public View getView(int pos, View convertView, ViewGroup parent) {

    //do initialization work with the convertView

    if(/*some logic determining whether the view should be colored*/) {
        convertView.setBackgroundColor(myColor);
    } else convertView.setBackgroundColor(defaultColor);
}

要记住的重要一点是,如果它不符合逻辑标准,则将其设置回另一种颜色,因为视图会被回收和重用,否则可能会处于意外状态。

于 2012-07-02T16:43:43.373 回答