Mój program zawiera dwie aktywności, aktywność nr 1 z przyciskiem, który przekierowuje do aktywności numer 2, gdzie jest pole tekstowe do uzupełnienia. Chciałbym żeby to pole tekstowe po powrocie do aktywności pierwszej i ponownym otwarciu aktywności drugiej było uzupełnione napisem, który wcześniej wpisałem. Niestety tak się nie dzieje.Skorzystałem z metody onSaveInstanceState, i także to nie pomogło.
A zapisałeś te dane do bundle? Wrzuć kod to będzie łatwiej
A użyłeś tego onSavedInstanceState poprawnie? Pokaż kod. Poza tym, to jest 5 sekund w wyszukiwarce: https://stackoverflow.com/a/6525808/1150795
Przecież zapisywanie czegokolwiek w onSaveInstanceState()
tutaj w niczym nie pomoże. Dane z Bundle
są używane przy odtwarzaniu aktywności po zmianie konfiguracji albo śmierci procesu. Wyjście z aktywności czyści jej stan.
@xyz91i Masz w zasadzie 3 wyjścia.
- Zapisywać dane w jakimś obiekcie, który żyje dłużej niż aktywność.
- Zapisywać dane na stałe np. w
SharedPreferences
. - Korzystać z dodatkowych danych w przekazanych do
Intent
startujących drugą aktywność i odbierać je w pierwszej aktywności za pomocąstartActivityForResult()
+onActivityResult()
.
@Michał Sikora: Czy bazy danych wchodzą w grę?
Wchodzą, ale to stosowanie armaty do zabicia muchy.
@Michał Sikora: Aha, no rozumiem, bo ta aplikacja to miałoby być proste toDoList, i moim problemem było to, że po wpisaniu czegoś w nowej aktywności, po powróceniu do aktywności początkowej, i ponowne otwarcie aktywności gdzie zapisywaliśmy nasze notatki, te właśnie wpisane wcześniej notatki nie były widoczne. Dziwiło mnie dlaczego tak się dzieje, ale teraz mam rozumieć, że w takim przypadku aktywność nie jest niszczona, tylko po prostu czyszczony jest stan.
xyz91i napisał(a):
w takim przypadku aktywność nie jest niszczona, tylko po prostu czyszczony jest stan.
Aktywność jest niszczona i jej stan jest czyszczony.
Natomiast do tego co opisałeś, to baza danych powinna być dobrym wyjściem, zakładając że takich notatek może być wiele.
@Michał Sikora: Okej, bo właśnie przerabiam książkę o Androidzie i tam był podany przykład użycia funkcji onSaveInstanceState oraz onCreate, których używaliśmy by zapisać dane w przypadku niszczenia aktywności, na przykład poprzez obrót ekranu, albo zadziałanie jakieś innej aplikacji. Mam rozumieć, że w takich przypadkach stan tych aplikacji nie jest czyszczony, skoro możemy wcześniej wprowadzone dane zapisać w wymiennionych wyżej funkcjach.
onSavedInstanceState()
służy do przechowywania małych ilości danych w przypadkach, gdy aktywność jest zniszczona niejako nieintencjonalnie. Mam na myśli przez system, czyli tak jak napisałeś przy zmiane konfiguracji lub w przypadku śmerci procesu.
Tutaj masz w miarę ok rozpisane, jak można przechowywać dane w różny sposób – https://developer.android.com/topic/libraries/architecture/saving-states.