彩色列表视图



是否可以为(动态)列表视图中的不同行设置不同的颜色?

我知道我可以设置背景颜色,例如在项目

单击事件侦听器上,但我想知道有没有办法在将项目添加到适配器时动态设置颜色?

不行吗?

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;
            }
     };

您必须编写自己的自定义 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);
}

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

最新更新