是否可以为(动态)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;
}
};
答案 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);
}
要记住的重要一点是,如果它不符合逻辑标准,则将其设置回另一种颜色,因为视图被回收和重复使用,否则可能处于意外状态。