彩色ListView

时间:2012-07-02 15:28:39

标签: colors android-listview

是否可以为(动态)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;
            }
     };

1 个答案:

答案 0 :(得分: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);
}

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