0
Was ist die beste Vorgehensweise, um einen Array-Adapter zu haben, der mehrere Objekttypen verarbeiten kann?ArrayAdapter für mehr als eine Klassenart
Adapter extends ArrayAdapter<?>
Ich habe 3 Arten von Klassen A.class
, B.class
, C.class
und die Logik in Adapter ist identisch.
public class Adapter extends ArrayAdapter<A,B,C ?> {
private int viewResourceId;
private LayoutInflater inflater;
private ArrayList<A,B,C ?> list;
public Adapter(Context context, int viewResourceId, ArrayList<A,B,C ?> list) {
super(context, viewResourceId, list);
this.viewResourceId = viewResourceId;
this.list = list;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return list.size();
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
Holder holder;
if (arg1 == null || arg1.getTag() == null) {
holder = new Holder();
arg1 = inflater.inflate(viewResourceId, null);
arg1.setTag(holder);
holder.textView = (TextView) arg1.findViewById(R.id.textView);
} else {
holder = (Holder) arg1.getTag();
}
// A,B,C
holder.textView.setText(list.get(arg0).getName());
return arg1;
}
static class Holder {
TextView textView;
}
}
Für jetzt habe ich drei verschiedene Adapter für jeden Klassentyp und legen Sie es
listView.setAdapter(new Adapter(this, R.layout.row_item, list<A,B,C ?>))
Öffentlichkeit Klasse Adapter erweitert ArrayAdapter ; private ArrayList Liste; if (T instanceof A) halter.textView (((ArrayList ) Liste) .get (arg0) .getName()) –
Wukash
@Wukash if (T instanceof A) Dies wird Kompilierzeit Fehler geben - "Ausdruck erwartet" –
Ja sollte sein, wenn (list instanceof ArrayList )) ... – Wukash