Я создал коллекцию 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); }
Вы переопределите getView в своем адаптере, чтобы внести изменения в представление. Имейте в виду, что ListView повторно использует реализации представления, поэтому, если вы измените цвет на пункт 10, убедитесь, что для всех остальных видов вы устанавливаете противоположный цвет.
например
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; } }
Вот код, надеюсь, что это будет полезно для других пользователей
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); }
Для этого вам нужно создать собственный адаптер массива, а затем изменить цвет фона, если условия правильные.
Отметьте это сообщение для примера: Custom ArrayAdapter setBackground в getView