Я провел небольшое исследование, чтобы выяснить, как это должно быть сделано правильно.
Я записываю это для других с той же проблемой, так как я думаю, что это правильный способ, как это сделать. Пожалуйста, дайте мне знать, если я ошибаюсь или если в этом решении есть недостатки, которых я не вижу.
public class WeightListAdapter extends ArrayAdapter<Integer> {
private static final int TYPE_COUNT = 2;
private static final int TYPE_ITEM_COLORED = 1;
private static final int TYPE_ITEM_NORMAL = 0;
public WeightListAdapter(Context context, List<Integer> objects) {
super(context, android.R.layout.simple_list_item_1, objects);
}
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
int item = getItem(position);
return (item == 30) ? TYPE_ITEM_COLORED : TYPE_ITEM_NORMAL;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
switch (getItemViewType(position)) {
case TYPE_ITEM_COLORED:
v.setBackgroundColor(Color.YELLOW);
break;
case TYPE_ITEM_NORMAL:
break;
}
return v;
}
}
Очевидно, базовый класс уже реализует логику, гарантирующую, что правильный convertView
передается методу getView
(основанному на методах getViewItemType
и getViewTypeCount
).