Leere listView

M

Maec

Neues Mitglied
0
Hallo zusammen,

ich habe folgendes Problem:

Ich verwende eine Klasse welche von SimpleCursorAdapter erbt:

Code:
public class MyAdapter extends SimpleCursorAdapter {

private Cursor cursor;
private LayoutInflater inflater;

private int columnIndexRowID;
private int columnIndexFromAddrString;
private int columnIndexToAddrString;

public LastRequestsAdapter(Context context, int layout, Cursor c,
        String[] from, int[] to) {
    super(context, layout, c, from, to);
    this.cursor = c;
    this.inflater = LayoutInflater.from(context);

    this.columnIndexRowID = c.getColumnIndex(MyDBAdapter.KEY_ROWID);
    this.columnIndexFromAddrString = c
            .getColumnIndex(MyDBAdapter.KEY_FROM_ADDR_STRING);
    this.columnIndexToAddrString = c
            .getColumnIndex(MyDBAdapter.KEY_TO_ADDR_STRING);

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    if(convertView==null){

        convertView = this.inflater.inflate(R.layout.main_activity_last_request_row, null);
        viewHolder = new ViewHolder();
        viewHolder.id = -1;
        viewHolder.fromAddr = (TextView) convertView.findViewById(R.id.from);
        viewHolder.toAddr =(TextView) convertView.findViewById(R.id.to);
        viewHolder.arrow = (ImageView) convertView.findViewById(R.id.last_request_arrow);
        convertView.setTag(viewHolder);
    }else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    this.cursor.moveToPosition(position);

    viewHolder.id = this.cursor.getInt(columnIndexRowID);
    viewHolder.fromAddr.setText(this.cursor.getString(this.columnIndexFromAddrString));
    viewHolder.toAddr.setText(this.cursor.getString(this.columnIndexToAddrString));
    viewHolder.arrow.setImageResource(R.drawable.arrow_alt);

    return convertView;

}

public class ViewHolder{
    public int id;
    public TextView fromAddr;
    public TextView toAddr;
    public ImageView arrow;
 }
}

Dies wird so verwendet:
Code:
listView.setAdapter(new MyAdapter(this,
            R.layout.main_activity_last_request_row, dbCursor,
            new String[] { MyDBAdapter.KEY_FROM_ADDR_STRING,
                    MyDBAdapter.KEY_TO_ADDR_STRING }, new int[] {
                    R.id.from, R.id.to }));

Grundsätzlich funktioniert das Befüllen der Liste und das Darstellen wunderbar, bis auf eine Kleinigkeit: Meine Liste besitzt zusätzlich einige header-Elemente, von denen eines per default auf View.GONE gesetzt ist. Dieses Element kann ich über einen Menüpunkt sichtbar schalten (View.VISIBLE). Wenn ich dies nun tue, so verschwinden mit dem Sichtbar-Schalten des header-Elements plötzlich alle Einträge in meiner Liste (vielmehr scheint es als werden Sie unsichtbar bzw. aus den entsprechenden TextViews gelöscht - Im logcat sehe ich, dass die entsprechenden Werte da sind!). Schaltet man das header-Element nun wieder auf unsichtbar, so sind alle Einträge wieder sichtbar. Dieses Verhalten ist komischerweise nur ein einziges Mal direkt nach dem Start zu beobachten; heisst: Nachdem die Einträge verschwunden sind und wieder aufgetaucht sind, kann man dieses Verhalten nicht mehr reproduzieren!

Was ich auch sehr interessant finde, ist der Fakt, dass ich diesen Fehler nur auf meinem Gerät reproduzieren kann. Im Emulator lässt sich dieser Fehler nicht reproduzieren, was das debuggen verhältnismäßig schwer macht.

Kennt jemand dieses Phänomen? Das ganze handelt sich um ein Uni-Projekt bei welchem am Dienstag Abgabetermin ist, daher würde ich mich über eine Antwort besonders freuen!! ;)

Danke schonmal im Voraus!
 
Zuletzt bearbeitet:
Ok, ich habe mittlerweile heraus gefunden, dass der Fehler nicht auftritt, wenn ich das Überprüfen nach
Code:
(convertView == null)
sein lasse. Ich verstehe aber immer noch nicht warum der Fehler sonst auftritt. Ich kann mit der Lösung leben, da sich unter 30 Elemente in meiner Liste befinden. Allerdings ist der nun eingeschlagene Weg des "Nicht-Wiederverwenden" von convertViews Performance-technisch sehr schlecht soweit ich gelernt habe, daher würde ich trotzdem gerne wissen, wo mein Fehler in der ursprünglichen Lösung liegt. Vielleicht kann mir das ja jemand von euch beantworten.
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.016
swa00
swa00
D
Antworten
9
Aufrufe
1.762
jogimuc
J
J
  • JoEntwickler
Antworten
0
Aufrufe
972
JoEntwickler
J
Zurück
Oben Unten