Risposte:
Se vuoi forzare il TextView
salvataggio del suo stato devi aggiungere l' freezesText
attributo:
<TextView
...
android:freezesText="true" />
Dalla documentazione in poi freezesText
:
Se impostata, la visualizzazione del testo includerà il suo testo completo corrente all'interno del suo ghiacciolo congelato oltre ai metadati come la posizione corrente del cursore. Per impostazione predefinita, questo è disabilitato; può essere utile quando il contenuto di una visualizzazione di testo non è memorizzato in un luogo persistente come un fornitore di contenuti
Per conservare i dati sul cambio di orientamento è necessario implementare i due metodi:
@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) Non tutte le viste con un ID salvano il loro stato. I widget Android, con un ID, il cui stato può essere modificato dall'utente, sembrano salvare il loro stato su un soft kill. Quindi EditText salva il suo stato, ma TextView non salva il suo stato su un soft kill.
"AFAIK, Android si preoccupa solo di salvare lo stato per le cose che dovrebbero cambiare. Ecco perché salva il testo in un EditText (che è probabile che un utente cambi) e forse non salva lo stato per un TextView (che normalmente rimane statico )"
Mark M
Quindi puoi scegliere di salvare lo stato della visualizzazione di testo in onSaveInstanceState e puoi scegliere di ripristinare lo stato della visualizzazione di testo in onCreate.
2) La best practice consiste nel salvare lo stato "interno" di non visualizzazione dell'istanza anche se dichiari
android:configChanges= "orientation|keyboardHidden"
Dai documenti:
"Tuttavia, la tua applicazione dovrebbe sempre essere in grado di chiudersi e riavviarsi con il suo stato precedente intatto. Non solo perché ci sono altre modifiche alla configurazione che non puoi impedire di riavviare l'applicazione, ma anche per gestire eventi come quando l'utente riceve un telefonata e poi torna alla tua applicazione. "
JAL
Android non gestisce questo genere di cose per te. Hai salvato tutti i dati manualmente.
È possibile utilizzare in un'attività per salvare i valori
@Override
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> savedValues = new HashMap<String, Object>();
savedValues.put("someKey", someData);
return savedValues;
}
e utilizzare qualcosa di simile nel metodo oncreate di un'attività per caricare gli oggetti salvati
HashMap < String, Object> savedValues
= (HashMap<String, Object>)this.getLastNonConfigurationInstance();
puoi anche scegliere di disabilitare il cambio di orientamento per un'attività
<activity android:name=".Activity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
Modifica le tue attività in AndroidManifest.xml per sovrascrivere il comportamento di modifica dell'orientamento aggiungendo questo alla tua attività / attività:
android:configChanges="orientation|keyboardHidden"
Dovrebbe essere simile a questo:
<activity android:name=".activity.LoginActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
</activity>
Aggiungili ad AndroidManifest.xml
Metti il nome dell'attività al posto di Activity_Name
<activity android:name="Activity_Name"
android:screenOrientation="sensor"
...
android:configChanges="orientation|keyboardHidden|screenSize">
Funzionerà anche con il cambio di valore TextField.
basta aggiungere
android:configChanges="orientation|screenSize"
alla tua attività in AndroidManifest.xml.
Quando la configurazione cambia, Android riavvia la tua attività per impostazione predefinita. Per cambiare questo è necessario sostituire il onConfigurationChanged()
metodo. Inoltre, dovresti aggiungere android:configChanges
al tuo file manifest.
Puoi leggere di più qui .
Ho anche usato
android:configChanges="orientation"
e non ha funzionato.
Ma poi ho trovato una soluzione.
Verifica se hai la seguente riga correttamente nel tuo maniest:
<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />
assicurati che non legga qualcosa di simile
<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`
L'ho avuto nel secondo modo al primo posto, ma quando ho corretto lo stato è stato preservato.