La mia comprensione era che tutte le viste standard con un ID dovevano salvare automaticamente il loro stato, e dopo aver provato questo su un esempio ho trovato che fosse piuttosto confuso.Perché TextView (con un ID) non salva automaticamente il suo stato?
Avevo solo 1 attività e il layout principale come elencato di seguito.
Quando cambio il testo di TextView facendo clic sul pulsante e quindi ruotando lo schermo, il TextView salva effettivamente il suo stato, ma dopo una rotazione, si reimposta allo stato predefinito.
stesso accade se modifico mentre nel paesaggio e ruotare: dopo la prima rotazione si salva ancora è stato, ma dopo l'altra rotazione (a meno che non posso cambiare ancora una volta il testo) si ripristina al valore predefinito.
Sono davvero confuso ora. Qualcuno potrebbe spiegarmi questo comportamento? Non sono stato in grado di trovare altre domande (o risposte) che spieghino questo comportamento specifico.
activity_main.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/activity_main_textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
android:text="test"
android:textSize="50sp"
/>
<EditText
android:id="@+id/activity_main_editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:maxLength="30"
android:maxLines="1"
/>
<Button
android:id="@+id/activity_main_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Set text"
/>
</RelativeLayout>
MainActivity.java:
package com.example.viewstatetest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editText;
private View button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.activity_main_textView);
editText = (EditText) findViewById(R.id.activity_main_editText);
button = findViewById(R.id.activity_main_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
textView.setText(editText.getText());
}
});
}
}
Prova questo forse: http://stackoverflow.com/questions/5123407/losing-data-when-rotate-screen – Zarwan
Grazie, ma che mostra come salvare lo stato. So come salvare manualmente lo stato, ma vorrei sapere perché alcune viste (a volte!) Non salveranno automaticamente il loro stato. – SuperLemon