ListAdapter ruft getView unötig oft auf

  • Antworten:8
Maximilian O
  • Forum-Beiträge: 990

03.04.2011, 18:11:59 via Website

Hallo community,
ich rätsele schon seit einigen Tagen an dem Problem dass bei mein ListAdapter die getView-Methode viel zu oft aufruft, und dazu noch falsch.
Hier mal der Code
1public View getView(int position, View convertView, ViewGroup parent) {
2 testGetView.put(position, convertView); // nur zum Test
3 System.out.println("getView " + position + " " + convertView); // nur zum Test
4 ViewHolder holder = null;
5 if (convertView == null) {
6 convertView = mInflater.inflate(R.layout.category_item, null);
7 holder = new ViewHolder();
8 holder.textView = (TextView)convertView.findViewById(R.id.category_text);
9 holder.textView.setId(position);
10 convertView.setTag(holder);
11
12 }
13 else
14 {
15 holder = (ViewHolder)convertView.getTag();
16 }
17
18 holder.textView.setText(categories.get(position).getName());
19
20 return convertView;
21 }
22
23
24 public static class ViewHolder {
25 public TextView textView;
26 }
27
28}

Normalerweise wird ja jede Position einmal aufgerufen, wenn noch keine View für diese Position angelegt ist (sollte immer der Fall sein) wird eine Neue erstellt. Die getView sollte eigentlich 5 Mal aufgerufen werden (5 Positionen), aber nach der Position 3 gehts wieder bei 0 los. Also fehlt immer die 4 und 5.
Könntet ihr mir bitte helfen?
MfG Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Gelöschter Account
  • Forum-Beiträge: 281

03.04.2011, 21:02:53 via Website

Views in ListViews werden recycled .

Maximilian O

Antworten
Maximilian O
  • Forum-Beiträge: 990

04.04.2011, 12:44:10 via Website

Achso, also heitß das, da ich ja erst nur 3 Viiews sehe, werden diese angelegt, wenn ich dann eine "wegschiebe" wird sie oben wieder rangesetz und neu verwendet.
Aber wie kann ich denn dann jeder View eine eigene, einmalige id geben?
MfG Maximilian.

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

04.04.2011, 12:59:28 via Website

Is schon klar, aber meine textiew die auf der View liegen brauchen ne id. Ich will dann einen onclicklistener machen, wo ich mir dann mit (TextView) findviewbyid(...) sie wieder hole und dann den Text auslese. Oder kann man das auch anders machen?
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

04.04.2011, 13:18:47 via Website

Du sollst die Daten eben nicht aus dem View lesen.
Das ist doch von hinten durch die Brust ins Auge :)
Der View zeigt Daten an, die du eh in einer Liste hast. Also musst Du nur wissen welche Position geklickt wurde und schaust dann in der Orginalliste in das entspr. Objekt.

Es gibt doch für ListViews einen speziellen Listener, der auch den Index des geklickten Elements zur Verfügung stellt.

Maximilian O

Antworten
Maximilian O
  • Forum-Beiträge: 990

04.04.2011, 13:20:49 via Website

Ok, ich werde es gleich mal austesten.
Danke schonmal im Vorraus.

— geändert am 04.04.2011, 13:21:06

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

04.04.2011, 13:27:16 via Website

setonItemClickListener ()

hilft dir weiter

swordiApps Blog - Website

Antworten
Maximilian O
  • Forum-Beiträge: 990

04.04.2011, 13:43:18 via Website

Jetzt klappt alles. Dankeschön.
Jetzt habe ich dank euch endlich verstanden wie son ListAdapter richtig funktioniert.
MfG Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten