Android listview verschwindet nach Bildschirm-rotation
Auf meinem layout habe ich einige Tasten tho einige Entscheidungen treffen, und dann eine Taste, um eine Abfrage an eine Datenbank. Das Ergebnis dieser Abfrage wird in einem ListView
in diesem layout.
Das problem ist, wenn ich nach ausführen der Abfrage, die ich drehen Sie den Bildschirm, die ListView
verschwindet, und führen Sie die Abfrage erneut aus.
Ich glaube, dass dies geschieht, weil die Aktivität neu gestartet. Nach den Vorschlägen hier habe ich Hinzugefügt, um meine Aktivität in der manifest - android:configChanges="orientation|keyboardHidden"
und in meinen code eingefügt:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.mylayout);
}
Aber das wird nicht funktionieren.
Hier der komplette code meiner Tätigkeit:
public class MyClass extends ListActivity implements OnClickListener, OnCheckedChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
//Creates the buttons and setOnClickListener and setOnCheckedChangeListener
}
@Override
public void onClick(View v) {
//Manages the buttons and their functions
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//See what group in radio group is checked
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//After pressing one button, a query is made and a listview is shown.
//This it to handle the user choice after he clicks an item on the listview
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.mylayout);
}
}
Dies ist seltsam, denn ich habe einige andere Aktivität wie diese:
public class AtoZ extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.atoz);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
//TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}
}
Diese auch führt eine Abfrage an die Datenbank, zeigt es auf einem ListView
und kümmert sich dann um die Auswahl des Nutzers. Wenn ich durch drehen des Bildschirms, ListView
noch zeigt.
Was kann ich tun?
- Warum stellst du das layout R. layout.Nährstoff im onConfigurationChanged-Methode (anstelle von R. layout.mylayout wie in der onCreate-Methode)?
- Habe vergessen, das zu ändern. Korrigiert
- Wie setzen Sie die Daten in die ListView? Binden Sie es an den DB-cursor?
- ja.
Cursor query = baseDados.getData(1,0,null); MyAdapt cursorAdapter = new MyAdapt(this, query,0); listContent.setAdapter(cursorAdapter);
AufMyAdapt
Ansicht ist die Bindung an den Mauszeiger - entfernen onConfigurationchange Methode, wenn Sie nicht zu ändern das layout. es genügt zu schreiben, in manifiest-Datei.
- Entfernt und nach Drehung des Bildschirms, listview verschwindet
Du musst angemeldet sein, um einen Kommentar abzugeben.
ListView wird neu erstellt, wenn Sie setContentView in der onConfigurationChanged Methode. Sie benötigen zum laden der Daten in das ListView wieder. wenn Sie verbindlich sind die ListView ein adapter, den Sie brauchen, um es in onConfigurationChanged.
public void onConfigurationChanged(Configuration newConfig)
eingegebenSystem.out.println("enter here");
Es wird nicht gedruckt, auf logcatonConfigurationChanged(Configuration)
Methode, anstatt neu gestartet. Wenn eine Konfigurations-änderung betrifft alle, die Sie nicht behandeln, aber die Aktivität wird noch neu gestartet werden undonConfigurationChanged(Configuration)
werden nicht genannt. Von: Activity-dev-SeiteVerwenden configChanges in Ihrer Aktivität unter manifest-Datei.
Dieser arbeitete für mich.
Es gibt 2 Dinge, die Ihre Probleme lösen kann:
Solver A:
android:configChanges="orientation|keyboardHidden"
in Ihrem manifest-xml - Datei.onConfigurationChanged(Configuration newConfig)
Funktion.Weil
onCreate()
nur einmal aufgerufen werden, jedes mal, wenn Sie Ihre Aktivität initialisiert wird. Während IhronConfigurationChanged()
neu geladen und bläst die neue AnsichtR.layout.mylayout
mit leeren Daten => Ihre Liste nicht gebunden mit Daten.Solver B:
Bewegen Ihre Daten verbindlich-code, der bereits geschrieben wurde in der onCreate() zu der überschreiben-Methode
onStart()
oderonResume()
. Ich empfehle, dass Sie verwendenonStart()
für Ihren Fall der Datenbindung.Sollten Sie die Entwickeln Seite
Android Activity life cycle
(Update):
Weil Sie Ihren laden
listContent
beim drücken auf die Taste search auf der Liste Element, so dass Sie die Pflege der Daten innerhalb der Aktivitäten um den Wiederaufbau der Liste aus (Z, e.g: ein string, der Suche). Dann in deronStart()
Sie erstellen Sie Ihre Liste von diesen Daten.Jedoch, es ist ziemlich seltsam, der Ihre Logik wenn Sie eine Liste der Artikel zu ändern, die ganze Liste selbst. Und beachten Sie, dass:
onListItemClick(..)
wird auch ausgelöst, wenn eine Taste auf der Liste geklickt wird.onStart()
und nach der rotation, immer noch das gleichesuper.onListItemClick(l, v, position, id);
in Ihre überschreibenden Methodeprotected void onListItemClick(..)
?android:configChanges="orientation|keyboardHidden|screenSize"
in Ihrer xml. Und beachten Sie, dass:onListItemClick
wird auch geschossen mit such-button geklickt, weil SrchBut wird auf die Liste.Müssen Sie überschreiben
onSaveInstanceState
undonRestoreInstanceState
Auf die
onSaveInstanceState
speichern Sie dieListView
Liste auf derBundle
.Auf die
onRestoreInstanceState
ist, wiederherstellen Sie die Liste mit denBundle
neu erstellen und die adapter.Müssen Sie wiederholen Sie die Abfrage (wenn Sie nicht speichern), wenn Sie tun, eine Orientierung zu ändern, weil, wenn dies geschehen ist, oncreate wird aufgerufen, wieder.
Könnten Sie versuchen, und speichern Sie die Daten, die in Ihrem listview, in so etwas wie gemeinsame Vorlieben.
AtoZ
, dass es fast das gleiche, ich weiß nicht?