2012-10-10 10 views
9

Obserwując zachowanie aplikacji w emulatorze Androida widzę, że zawartość EditText jest zachowywana po zmianie orientacji ekranu (Ctrl + F11). Ale zawartość TextView jest resetowana do wartości początkowej i nie zachowuje najnowszych informacji ustawionych przez program. Czy to zachowanie z definicji? Co mogę zrobić, aby zachować tę zawartość?Zawartość TextView jest tracona po zmianie orientacji ekranu

Odpowiedz

11

Użyj tej właściwości w swoim TextViewandroid:freezesText="true".

+3

To nie wydaje się być wystarczające. Co jeszcze musiałeś dodać? –

+1

@dpk To działało dla mnie; nie ma nic więcej do dodania. – DBedrenko

3

Po zmianie orientacji Android ładuje działanie, a więc niszczy większość informacji, takich jak zmiany w TextView. Będziesz musiał zastąpić onSaveInstanceState(), który będzie działał przed zmianą orientacji ekranu. Wtedy będziesz mieć do niego dostęp w swoim Bundle, który jest przekazywany do onCreate. Powinieneś także odwołać się do tego, aby zrozumieć cykl życia Activity.

11

Można użyć savedInstanceBundle zachować chwyt danych nadrzędnymi dwie metody wewnątrz swojej działalności, podobnie jak poniżej:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save state to the savedInstanceState 
    savedInstanceState.putString("MyString", textview.getText()); 

} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore state from savedInstanceState 
    String myString = savedInstanceState.getString("MyString"); 
    textview.setText(myString); 
} 

Dodaj swoje przedmioty do Bundle w onSaveInstanceState i czytać je z powrotem w czasie onRestoreInstanceState . Działa to w podobny sposób, jak przekazywanie wartości przez intencje podczas tworzenia działań.

+0

Pracowałem dla mnie! Dzięki. –

Powiązane problemy