Frage

Ich bin ein seltsames Problem bekommen, wenn mein ListView erfrischend, es funktioniert gut, bis das Gerät gedreht wird und dann, wenn es erfrischend es wieder vollständig leer geht. Dies kann nur durch Drehen des Gerätes wieder befestigt werden (wie es auch in onCreate() aktualisiert wird), aber dann, wenn sein aktualisiert wieder geht es leer. Problem weiterhin besteht, bis app neu gestartet wird.

EDIT:

Einige Code:

private ListView contactlist = null;
private static MatrixCursor matrixcursor = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    contactlist = (ListView) findViewById(R.id.contactlist);
    if (savedInstanceState == null) {
        matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
    } else {
        contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
    }
}

Dies funktioniert gut, aber wann immer:

contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));

wird nach onCreate() genannt und nachdem das Gerät gedreht wurde, um die ListView geht leer.

War es hilfreich?

Lösung 2

Nun, ich schaffte es zu beheben, indem sie contactlist statisch:

 private static ListView contactlist = null;

Ich habe keine Ahnung, warum dies funktioniert (hat nur einen Versuch / Fehler für ein paar Stunden) also wenn jemand erklären könnte, das wäre toll.

Andere Tipps

Ich denke, Ihre MatrixCursor ist eigentlich null. Wenn Sie das Telefon drehen, wie Sie wissen, ist die Aktivität zerstört. Also das savedinstanceState Bündel möglicherweise nicht null sein, aber die MatixCursor ist dann nicht neu initialisiert bekommen. Ja, es ist statisch, aber ich habe das Gefühl, wenn es für einige Chance, es nicht in dem gleichen Classloader geladen wird ... gut, dass statische wird nicht allzu zuverlässig sein.

Es gibt eine Methode, die die meisten ungeschickt bezeichnet wird:

onRetainNonConfigurationInstance ()

Was ich denke, wird Ihnen helfen, diesen Fall zu lösen. Also, wenn Sie Ihre MatrixCursor Instanz dorthin zurückkehren, können Sie in einem späteren Aufruf onCreate () Verwendung getLastNonConfigurationInstance () zu lesen, die Daten wieder aus. Es ist nicht genannt werden garantiert, so dass Sie noch brauchen werden, den Fall zu behandeln, in denen Sie keinen Zustand gespeichert haben. Hoffentlich hilft.

private ListView contactlist = null;
private MatrixCursor matrixcursor = null;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    contactlist = (ListView) findViewById(R.id.contactlist);
    matrixcursor = (MatrixCursor)getLastNonConfigurationInstance();
    if (matrixcursor == null) {
        matrixcursor = new MatrixCursor(new String[] {"_id","name","one","two","three","four"});
    } else {
        contactlist.setAdapter(new listCursorAdapter(this,matrixcursor));
    }
}

public MatrixCursor onRetainNonConfigurationInstance() {
return matrixcuror;
}

public MatrixCuror getLastNonConfigurationInstance() {
return (MatrixCursor) super.getLastNonConfigurationInstance();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top