0

Ich habe activity_main.xml Layout-Datei und ich erstellte Landschaft Layout-Datei im Verzeichnis "Layout-Land". Offensichtlich haben beide Dateien die gleichen Namen.Android Switching zu Layout-Land

Landschaft und Hauptlayouts funktionieren gut, aber wenn ich mein Telefon zum switch-Layout bewege, ändern sich alle meine textViews und editTextes auf Standardwerte.

+0

dass ist, weil die Aktivität neu geladen wird, wenn Sie den Bildschirm –

+0

drehen, müssen Sie Laufzeitänderungen behandeln. Heres das offizielle Dokument, wie man das tut https://developer.android.com/guide/topics/resources/runtime-changes.html –

+5

Siehe Antworten für Frage: [Handle Bildschirmdrehung ohne Daten zu verlieren - Android] (http://stackoverflow.com/questions/10126845/handle-screen-rotation-without-losing-data-android) –

Antwort

0

Jedes Mal, wenn Sie Ihr Handy, Konfigurationsänderung drehen passieren und eine neue Instanz Ihrer Aktivität erstellt wird. Aus diesem Grund sind Textview und Edittext auf Standardwerte eingestellt. Wenn für Ihre Ansichten jedoch die IDs in der XML-Datei festgelegt sind, gehen die für sie festgelegten Werte während einer Konfigurationsänderung nicht verloren. Wenn Sie keine ID festlegen möchten, können Sie die Werte für Textview und Edittext unter onSaveInstanceState speichern und in onRestoreInstanceState wiederherstellen.

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("arg1", textview1.getText()); 
    outState.putString("arg2", edittext1.getText().toString()); 
    ...... 
} 

Zur Wiederherstellung der gespeicherten Werte folgen folgenden Code ein:: Zum Beispiel Ihre Textview und EditText Werte folgen Sie den folgenden Code speichern

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    textview1.setText(savedInstanceState.getString("arg1")); 
    edittext1.setText(savedInstanceState.getString("arg2")); 
    ...... 
} 

Sie mehr dazu hier lesen: https://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en

+0

Meine Textansicht und Edittext haben IDs in beiden XML-Layout-Dateien und es funktioniert nicht. Ich werde versuchen, Variable zu speichern und wiederherzustellen, danke für die großartige Antwort. –

+0

Entschuldigung, ich habe nicht erwähnt, dass die IDs in beiden Layouts eindeutig und identisch sein sollten, d. H. Hochformat und Querformat. – Harry

+0

natürlich habe ich die gleichen IDs in beiden Layouts für jede Ansicht, aber was meinst du "eindeutige" IDs? Im Moment habe ich main_layout und landscape_layout, die die gleichen Dateien sind. Ich weiß, dass ich es mit Bundle schaffen kann, aber ich bin nur gespannt, ob ich es ohne Bundle schaffen kann :) –