我创建了一个ArrayList<HashMap<String, String>>
集合来保存ListView
的数据。我正在使用SimpleAdapter
。
当列表项的ID为%10 == 0时,是否可以更改列表项的背景?
以下是代码(生成布局的方法):
private void fillData() {
Cursor c = this.mDbManager.getNgOrderDetailByOrderNumber(this.mNumber);
ArrayList<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
if (!c.isAfterLast()) {
do {
// ... filling HashMap and putting it to ArrayList
} while (c.moveToNext());
}
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.list_item,
new String[] { "product", "ordered", "price", "discount" },
new int[] { R.id.ProductTextView, R.id.OrderedTextView,
R.id.PriceTextView, R.id.DiscountTextView });
ListView l = (ListView) findViewById(android.R.id.list);
l.setAdapter(adapter);
}
答案 0 :(得分:8)
您覆盖适配器中的getView以更改视图。请记住,ListView重用了视图实现,因此如果将颜色更改为第10项,请确保将颜色设置为与所有其他视图相反的颜色。
e.g。
new SimpleAdapter( ... ) {
@Override
public View getView (int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position == 10) {
// set background color = red;
} else {
// set background color = green;
}
return view;
}
}
答案 1 :(得分:3)
以下是代码,希望它对其他用户有用
private void fillData() {
Cursor c = this.mDbManager.getNgOrderDetailByOrderNumber(this.mNumber);
ArrayList < HashMap < String, String >> items = new ArrayList < HashMap < String, String >> ();
if (!c.isAfterLast()) {
do {
// ... filling HashMap and putting it to ArrayList
} while (c.moveToNext());
}
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.list_item,
new String[] {
"product", "ordered", "price", "discount"
},
new int[] {
R.id.ProductTextView, R.id.OrderedTextView,
R.id.PriceTextView, R.id.DiscountTextView
}) {
// here is the method you need to override, to achieve colorful list
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
HashMap < String, String > items = (HashMap < String, String > ) getListView()
.getItemAtPosition(position);
if (Long.parseLong(items.get("id")) % 10 == 0) {
view.setBackgroundColor(Color.GREEN);
} else {
view.setBackgroundColor(Color.YELLOW);
}
return view;
}
};
ListView l = (ListView) findViewById(android.R.id.list);
l.setAdapter(adapter);
}
答案 2 :(得分:0)
要完成此操作,您需要创建自定义数组适配器,然后在条件合适时更改背景颜色。