Hi M3doXX,
also ich denke an einem eigenen Adapter kommst du so schnell nicht vorbei. Meine Vorgehensweise ist eigentlich immer, dass ich mir eine Bean baue, die alle relevanten Daten für eine Zeile hält. Also nur eine Klasse, die getter und setter Methoden enthält, keinerlei Logik. In deinem Fall wohl
public class LiveTicker {
public enum KARTE { GELB, ROT, GELBROT };
private KARTE karte = null;
private int torA = -1;
private int torB = -1,
public LiveTicker(int torA, int torB, KARTE karte) {
this.torA = torA;
this.torB = torB;
this.karte = karte;
}
public int getTorA() {
return this.torA;
}
// und so weiter ....
}
Alles anzeigen
Dann erstellst du einen Klasse, ich taufe sie einfach mal LiveTickerAdapter. Sie bekommt ein ArrayList<LiveTicker> und evtl den context (brauch ich meistens).
public class LiveTickerAdapter extends BaseAdapter {
private final ArrayList<LiveTicker> values;
private final LayoutInflater inflator;
public LiveTickerAdapter(Context context, ArrayList<LiveTicker> values) {
this.inflator = LayoutInflater.from(context);
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// falls nötig, convertView bauen
if (convertView == null) {
// Layoutdatei entfalten
convertView = inflator.inflate(R.layout.listitem, parent, false);
// Holder erzeugen
holder = new ViewHolder((TextView) convertView.findViewById(R.id.itemTorA), (TextView) convertView.findViewById(R.id.itemTorB),
(ImageView) convertView.findViewById(R.id.itemKarte));
convertView.setTag(holder);
} else {
// Holder bereits vorhanden
holder = (ViewHolder) convertView.getTag();
}
LiveTicker item = (LiveTicker) getItem(position);
holder.getTorA().setText(item.getTorA());
holder.getTorB().setImageResource(item.getTorB());
holder.getKarte().setText(item.getKarte());
return convertView;
}
@Override
public int getCount() {
return values.size();
}
@Override
public Object getItem(int position) {
return values.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
Alles anzeigen
Dieser Holder ist ein Zwischenschritt, den es nicht unbedingt braucht. Die Values sind eigentlich ziemlich gleich, nur dass es gleich TextViews sind, die dann so wie sie sind ausgegeben werden. Hab den Zwischenschritt als Trennung zwischen reinen Daten und Anzeige bis jetzt so immer gemacht .... Baue meistens eine innere Klasse
private static class ViewHolder {
private TextView torA = null;
private TextView torB = null;
private TextView karte = null;
public ViewHolder(TextView torA, TextView torB, TextView karte) {
this.torA = torA;
this.torB = torB;
this.karte = karte;
}
public TextView getTorA() {
return this.torA;
}
// und so weiter ....
}
Alles anzeigen
Dann kommen wir mal zur Zeile
convertView = inflator.inflate(R.layout.listitem, parent, false);
Da holt er sich das Layout listitem. Schaut irgendwie so aus
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@drawable/listselector" >
<TextView
android:id="@+id/itemTorA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="@string/listarrow"
android:paddingRight="20dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/itemTorB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/itemTorA"
android:paddingLeft="40dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/itemKarte"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/itemTorB"
android:paddingLeft="40dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
Alles anzeigen
Ist jetzt einfach mal alles so aus einem meiner Projekte zusammen kopiert und zum besseren Verständnis an deine Namen angepasst. Falls irgendwo noch Variablen stehen, die sonst nirgends vorkommen, hab ich die übersehen
Aber im großen und ganzen wars das eigentlich auch schon. Du gibst deiner ListView einen Adapter mit Daten. Du könntest dort auch deine beiden ArrayLists übergeben, dann musst du in der getView halt das ganze auslesen. Du brauchst auch keinen Holder, du kannst das da auch direkt machen, die Trennung finde ich persönlich nur schöner. Und durch den LayoutInflator weiß er, wie die Elemente dann angeordnet werden müssen.
Ich hoffe ich konnte dir helfen
Gruß,
matze