W mojej aplikacji mam TextView
i EditText
. Oba zawierają dane. Gdy orientacja ekranu zmienia dane w EditText
pozostałości, ale TextView
dane są usuwane.
Czy ktoś może mi pomóc znaleźć sposób na przechowywanie danych TextView
?
W mojej aplikacji mam TextView
i EditText
. Oba zawierają dane. Gdy orientacja ekranu zmienia dane w EditText
pozostałości, ale TextView
dane są usuwane.
Czy ktoś może mi pomóc znaleźć sposób na przechowywanie danych TextView
?
Jeśli chcesz wymusić TextView
zapisanie swojego stanu musisz dodać freezesText
atrybut:
<TextView
...
android:freezesText="true" />
Z dokumentacji freezesText
:
Jeśli jest ustawiona, widok tekstu będzie zawierał swój bieżący pełny tekst wewnątrz zamrożonego sopla oprócz metadanych, takich jak bieżąca pozycja kursora. Domyślnie jest to wyłączone; może być przydatne, gdy zawartość widoku tekstu nie jest przechowywana w trwałym miejscu, takim jak dostawca treści
Aby zachować dane o zmianie orientacji, musisz wdrożyć dwie metody:
źródło
1) Nie wszystkie widoki z identyfikatorem zapisują swój stan. Widżety Androida z identyfikatorem, którego stan może zmienić użytkownik, wydają się zapisywać swój stan po miękkim zabiciu. Więc EditText zapisuje swój stan, ale TextView nie zapisuje swojego stanu po miękkim zabiciu.
„AFAIK, Android zajmuje się zapisywaniem stanu tylko dla rzeczy, które mają się zmienić. Dlatego zapisuje tekst w EditText (który użytkownik prawdopodobnie zmieni) i być może nie zapisuje stanu dla TextView (który zwykle pozostaje statyczny ) ”
Mark M.
Możesz więc zdecydować się na zapisanie stanu widoku tekstu w onSaveInstanceState i możesz wybrać przywrócenie stanu widoku tekstu w onCreate.
2) Najlepszą praktyką jest zapisanie „wewnętrznego” stanu wystąpienia bez widoku, nawet jeśli zadeklarujesz
Z dokumentów:
„Jednak aplikacja powinna zawsze mieć możliwość zamykania i ponownego uruchamiania z nienaruszonym poprzednim stanem. Nie tylko z powodu innych zmian w konfiguracji, którym nie można zapobiec przed ponownym uruchomieniem aplikacji, ale także w celu obsługi zdarzeń, takich jak otrzymanie przez użytkownika przychodzącego rozmowa telefoniczna, a następnie wraca do aplikacji ”.
JAL
źródło
Android nie obsługuje tego typu rzeczy za Ciebie. Zapisałeś wszystkie dane ręcznie.
Możesz użyć w działaniu, aby zapisać wartości
i użyj czegoś takiego w metodzie oncreate działania, aby załadować zapisane obiekty
możesz również wybrać opcję wyłączenia zmiany orientacji dla działania
źródło
Zmodyfikuj swoje działania w AndroidManifest.xml, aby nadpisać zachowanie zmiany orientacji, dodając to do swojej aktywności / działań:
Powinien wyglądać mniej więcej tak:
źródło
Dodaj je do pliku AndroidManifest.xml
Umieść nazwę działania w miejscu nazwa_działania
Będzie to działać również w przypadku zmiany wartości TextField.
źródło
poprostu dodaj
do swojej aktywności w AndroidManifest.xml.
źródło
Po zmianie konfiguracji Android ponownie uruchamia Twoją aktywność domyślnie. Aby to zmienić, należy zastąpić
onConfigurationChanged()
metodę. Powinieneś także dodaćandroid:configChanges
do pliku manifestu.Możesz przeczytać więcej tutaj .
źródło
Użyłem też
i to nie zadziałało.
Ale potem znalazłem rozwiązanie.
Sprawdź, czy masz następujący wiersz poprawnie w swoim pierwszym:
upewnij się, że nie ma czegoś takiego jak
Miałem to na drugim miejscu, ale po poprawieniu stan został zachowany.
źródło