Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Leere listView

Das Thema "Leere listView" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 06.02.2011, 10:09   #1 (permalink)
Neuer Benutzer

Registriert seit: 06.02.2011
Beiträge: 2
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Leere listView

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!

Geändert von Maec (06.02.2011 um 12:57 Uhr)
Maec ist offline   Mit Zitat antworten
Alt 06.02.2011, 18:17   #2 (permalink)
Neuer Benutzer

Registriert seit: 06.02.2011
Beiträge: 2
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Leere listView

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.
Maec ist offline   Mit Zitat antworten
Antwort

Stichworte
android, listview, simplecursoradapter

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
Leere SMS versenden enrage Samsung Galaxy S (I9000) Forum 10 19.08.2011 17:12
Leere Stellen Menü auffüllen bvt-1 Android Allgemein 3 31.12.2010 18:36
visionary und leere Ordner ulbi Root / Hacking / Modding für HTC Desire HD 0 17.11.2010 17:03
leere Fehlermldungbeim synchen Nattii HTC Desire Forum 0 28.09.2010 21:41
Browser - leere Seite? Nonius HTC Desire Forum 5 16.07.2010 18:05




Du liest gerade: "Leere listView" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.