Antworten:
Wenn Sie TextView
Ihren Status erzwingen möchten, müssen Sie das folgende freezesText
Attribut hinzufügen :
<TextView
...
android:freezesText="true" />
Aus der Dokumentation zu freezesText
:
Wenn diese Option aktiviert ist, enthält die Textansicht neben Metadaten wie der aktuellen Cursorposition auch den aktuellen vollständigen Text im eingefrorenen Eiszapfen. Standardmäßig ist dies deaktiviert. Dies kann nützlich sein, wenn der Inhalt einer Textansicht nicht an einem dauerhaften Ort wie einem Inhaltsanbieter gespeichert ist
Um Daten zur Orientierungsänderung beizubehalten, müssen Sie die beiden Methoden implementieren:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Read values from the "savedInstanceState"-object and put them in your textview
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Save the values you need from your textview into "outState"-object
super.onSaveInstanceState(outState);
}
1) Nicht alle Ansichten mit einer ID speichern ihren Status. Android-Widgets mit einer ID, deren Status vom Benutzer geändert werden kann, scheinen ihren Status bei einem Soft-Kill zu speichern. EditText speichert also seinen Status, TextView speichert seinen Status jedoch nicht bei einem Soft-Kill.
"AFAIK, Android stört das Speichern des Status nur für Dinge, von denen erwartet wird, dass sie sich ändern. Aus diesem Grund speichert es den Text in einem EditText (den ein Benutzer wahrscheinlich ändert) und speichert den Status möglicherweise nicht für eine TextView (die normalerweise statisch bleibt) ) "
Mark M.
Sie können also den Status der Textansicht in onSaveInstanceState speichern und den Status der Textansicht in onCreate wiederherstellen.
2) Es wird empfohlen, den "internen" Instanzstatus ohne Ansicht zu speichern, auch wenn Sie dies deklarieren
android:configChanges= "orientation|keyboardHidden"
Aus den Dokumenten:
"Ihre Anwendung sollte jedoch immer in der Lage sein, mit ihrem vorherigen Status herunterzufahren und neu zu starten. Nicht nur, weil es andere Konfigurationsänderungen gibt, die Sie nicht daran hindern können, Ihre Anwendung neu zu starten, sondern auch, um Ereignisse zu behandeln, z. B. wenn der Benutzer einen eingehenden Empfang erhält Telefonanruf und kehrt dann zu Ihrer Anwendung zurück. "
JAL
Android erledigt solche Dinge nicht für Sie. Sie haben alle Daten manuell gespeichert.
Sie können in einer Aktivität Werte speichern
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
und verwenden Sie so etwas in der oncreate-Methode einer Aktivität, um die gespeicherten Objekte zu laden
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
Sie können auch die Deaktivierung der Orientierungsänderung für eine Aktivität auswählen
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Ändern Sie Ihre Aktivitäten in AndroidManifest.xml, um das Verhalten bei Orientierungsänderungen zu überschreiben, indem Sie dies zu Ihrer Aktivität / Ihren Aktivitäten hinzufügen:
android:configChanges="orientation|keyboardHidden"
Es sollte ungefähr so aussehen:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
Fügen Sie diese zu AndroidManifest.xml hinzu. Geben
Sie Ihren Aktivitätsnamen an die Stelle von Aktivitätsname
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
Dies funktioniert auch mit der Wertänderung von TextField.
einfach hinzufügen
android:configChanges="orientation|screenSize"
zu Ihrer Aktivität in AndroidManifest.xml.
Wenn sich die Konfiguration ändert, startet Android Ihre Aktivität standardmäßig neu. Um dies zu ändern, sollten Sie die onConfigurationChanged()
Methode überschreiben . Außerdem sollten Sie hinzufügenandroid:configChanges
Ihrer Manifestdatei .
Sie können mehr lesen hier .
Ich habe auch verwendet
android:configChanges="orientation"
und es hat nicht funktioniert.
Aber dann habe ich eine Lösung gefunden.
Überprüfen Sie, ob Sie die folgende Zeile korrekt in Ihrem männlichsten haben:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
Stellen Sie sicher, dass es nicht so etwas liest
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
Ich hatte es auf die zweite Art und Weise, aber als ich es korrigierte, blieb der Zustand erhalten.