GridView bringt werte durcheinander und zeigt doppelte werte

  • Antworten:3
C0dR
  • Forum-Beiträge: 2

14.04.2012, 23:51:53 via Website

Hallo,

mein problem ist nicht einfach zu beschreiben. Ich hab ein Gridview und fülle es mit ca 90 einträgen.
Jetzt habe ich aber das Problem das wenn ich scrolle, die werte durcheinander springen und einige fehlen und andere doppelt vorkommen. Ich habe es schon mit generierten werten versucht und mir ist aufgefallen das wenn ich nur so viele werte wie auf dem display angezeigt werden ins Gridview packe, gibt es keine probleme. Sobald man aber scrollen muss (ich vermute getView wird dann öfter aufgerufen) gibt es die beschriebenen probleme.
Ich hab schon alles mögliche probiert und gesucht aber ich finde nichts dazu.

Ich hoffe ihr versteht mein Problem. Warscheinlich mach ich nur einen dummen fehler (bin noch recht neu in der Android entwicklung)

Hier mein ImageAdapter

1public class ImageAdapter extends BaseAdapter{
2 Context mContext;
3 List<Champion> Champions;
4
5 public ImageAdapter(Context c, List<Champion> champions){
6 mContext = c;
7 Champions = champions;
8 }
9 @Override
10 public int getCount() {
11 return Champions.size();
12 }
13
14 @Override
15 public View getView(int position, View convertView, ViewGroup parent) {
16 // TODO Auto-generated method stub
17 View v;
18 if(convertView==null){
19 Champion c = Champions.get(position);
20 LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
21 v = li.inflate(R.layout.chmp_grid_layout, null);
22 TextView tv = (TextView)v.findViewById(R.id.icon_text);
23 tv.setText(c.Name);
24 ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
25
26 iv.setImageBitmap(c.Icon);
27 }
28 else
29 {
30 v = convertView;
31 }
32 return v;
33 }
34 @Override
35 public Object getItem(int arg0) {
36 return null;
37 }
38 @Override
39 public long getItemId(int arg0) {
40 return 0;
41 }
42 }

habs schon mit tv.setText(position); versucht und da habe ich dann erkannt dass die Reihenfolgen doch recht durcheinander geraten wenn es viele Items werden.


MfG

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

15.04.2012, 00:06:42 via Website

Hey,

das liegt daran, dass du das mit der convertview falsch verstehst.
Wenn beispielsweise 10 Items untereinander auf den Bildschirm passen würden, fragt er dich z.B. 14 mal nach einer View (hier ist convertview == null). Dann, wenn du scrollst und erste Views nach oben verschwinden, nimmt er diese und gibt sie dir als convertview zurück. D.h. diese enthalten noch den Inhalt, der gerade nach oben verschwunden ist. Was du nun machst ist diese View einfach anzuzeigen. Du müsstest allerdings z.B. per setText den Inhalt dieser View noch anpassen, sodass sie das anzeigt, was nun unten in der Liste kommt.

Lg Ansgar

— geändert am 15.04.2012, 00:07:11

Antworten
C0dR
  • Forum-Beiträge: 2

16.04.2012, 00:53:28 via Website

Wow das wars wirklich.
hab

1else
2{
3v = convertView;
4}


mit

1else
2{
3v = convertView;
4TextView tv = (TextView)v.findViewById(R.id.icon_text);
5tv.setText(c.Name);
6ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
7
8iv.setImageBitmap(c.Icon);
9}

ausgetauscht und jetzt gehts. Vielen Dank.
Muss aber sagen die meisten Tutorials machen das so wie bei mir am anfang ( habs ja aus einem Tutorial). Genau genommen ist das dann aber nicht richtig oder?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

16.04.2012, 07:34:06 via App

Wer die convertView einfach zurück gibt, will entweder nur gleiche Elemente in der Liste oder hat es nicht verstanden und macht es falsch.
Lg Ansgar

Antworten