Implementieren Sie einen benutzerdefinierten Adapter für Ihre Klasse:
public class MyClassAdapter extends ArrayAdapter<MyClass> {
private static class ViewHolder {
private TextView itemView;
}
public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
super(context, textViewResourceId, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.listview_association, parent, false);
viewHolder = new ViewHolder();
viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
MyClass item = getItem(position);
if (item!= null) {
// My layout has only one TextView
// do whatever you want with your string and long
viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
}
return convertView;
}
}
Für diejenigen, die mit dem Android-Framework nicht sehr vertraut sind, wird dies hier ausführlicher erläutert: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView .
textViewResourceId
, dass oben nicht verwendet wird?Sie können
toString()
MyClass einfach eine Methode hinzufügen : http://developer.android.com/reference/android/widget/ArrayAdapter.html :quelle
MyClass
, müssen Sie umgestalten. Schließlich ist es im Allgemeinen eine schlechte Idee, die Präsentationslogik mit Ihren Modellen zu verknüpfen. Modelle sollten nicht wissen, wie sie dem Benutzer präsentiert werden.MyClass
müssen Sie also eine dedizierte Klasse hinzufügen,MyClassView
die das zugrunde liegende Modell umschließt (und dietoString( )
Implementierung bereitstelltIch denke, das ist der beste Ansatz. Die Verwendung der generischen ArrayAdapter-Klasse und die Erweiterung Ihres eigenen Objektadapters ist wie folgt:
und hier dein Adapter (Beispiel):
und schließlich, wie man es initialisiert:
Ich habe einen Gist mit anpassbarem ArrayVadapter für die Schwerkraft des TextView-Layouts erstellt:
https://gist.github.com/m3n0R/8822803
quelle
Unterklassifizieren Sie den ArrayAdapter und überschreiben Sie die Methode getView () , um Ihre eigene Ansicht zurückzugeben, die den Inhalt enthält, den Sie anzeigen möchten.
quelle
Hier ist ein kurzes und schmutziges Beispiel für die Verwendung eines ArrayAdapters, wenn Sie sich nicht mit der Erweiterung der Mutterklasse beschäftigen möchten:
quelle