Jak przekazać wartość z jednego ekranu do poprzedniego ekranu?
Rozważ taki przypadek: mam dwie czynności. Pierwszy ekran ma jeden TextView
i przycisk, a drugie działanie ma jeden EditText
i przycisk.
Jeśli kliknę pierwszy przycisk, to musi przejść do drugiej czynności i tutaj użytkownik musi wpisać coś w polu tekstowym. Jeśli naciśnie przycisk z drugiego ekranu, wówczas wartości z pola tekstowego powinny przejść do pierwszej czynności, która powinna zostać wyświetlona w pierwszej czynności TextView
.
android
android-activity
Kumar
źródło
źródło
Odpowiedzi:
Przechwytywanie czynności wykonywanych na jednym działaniu w innym wymaga trzech kroków.
Uruchom działanie drugorzędne (działanie „Edytuj tekst”) jako działanie podrzędne, korzystając
startActivityForResult
z działania głównego.W ramach podaktywności, zamiast po prostu zamykać działanie, gdy użytkownik kliknie przycisk, należy utworzyć nową intencję i dołączyć wprowadzoną wartość tekstową do pakietu dodatków. Przekazanie go z powrotem do połączenia rodzica
setResult
przed wywołaniem wfinish
celu zamknięcia dodatkowego działania.Ostatnim krokiem jest wywołanie działania: Zastąp,
onActivityResult
aby nasłuchiwać wywołań zwrotnych z działania wpisu tekstowego. Pobierz dodatkowe z zwróconej intencji, aby uzyskać wartość tekstową, którą powinieneś wyświetlić.źródło
new Intent(null);
było „zbyt niejednoznaczne” i musiałem to zmienićnew Intent();
.Dostęp do zmiennych lub obiektów w innych klasach lub działaniu można uzyskać na kilka sposobów.
A. Baza danych
B. wspólne preferencje.
C. Serializacja obiektów.
D. Klasę, która może przechowywać wspólne dane, można nazwać Common Utilities, od której zależy.
E. Przekazywanie danych przez intencje i interfejs Parcelable.
To zależy od potrzeb projektu.
A. Baza danych
SQLite to baza danych typu open source, która jest osadzona w systemie Android. SQLite obsługuje standardowe funkcje relacyjnej bazy danych, takie jak składnia SQL, transakcje i przygotowane instrukcje.
Samouczki - http://www.vogella.com/articles/AndroidSQLite/article.html
B. Wspólne preferencje
Załóżmy, że chcesz przechowywać nazwę użytkownika. Więc teraz będą dwie rzeczy: nazwa użytkownika klucza , wartość wartości.
Jak przechowywać
Używając putString (), putBoolean (), putInt (), putFloat (), putLong () możesz zapisać żądany typ dtatype.
Jak pobrać
http://developer.android.com/reference/android/content/SharedPreferences.html
C. Serializacja obiektów
Serlizacja obiektu jest używana, jeśli chcemy zapisać stan obiektu, aby wysłać go przez sieć lub możesz użyć go również do swoich celów.
Użyj fasoli java i przechowuj je jako jedno z jego pól i użyj do tego getterów i setterów
JavaBeans to klasy Java, które mają właściwości. Pomyśl o właściwościach jako prywatnych zmiennych instancji. Ponieważ są prywatne, jedynym sposobem, w jaki można uzyskać do nich dostęp spoza ich klasy, są metody w klasie. Metody zmieniające wartość właściwości nazywane są metodami ustawiającymi, a metody, które pobierają wartość właściwości, nazywane są metodami pobierającymi.
Ustaw zmienną w swojej metodzie poczty za pomocą
Następnie użyj serializacji obiektu, aby serializować ten obiekt, aw innej klasie zdeserializuj ten obiekt.
W serializacji obiekt może być reprezentowany jako sekwencja bajtów, która zawiera dane obiektu, a także informacje o typie obiektu i typach danych przechowywanych w obiekcie.
Po zapisaniu zserializowanego obiektu do pliku można go odczytać z pliku i deserializować, co oznacza, że informacje o typie i bajty reprezentujące obiekt i jego dane mogą zostać użyte do ponownego utworzenia obiektu w pamięci.
Jeśli chcesz samouczek do tego, zapoznaj się z tym linkiem
http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html
Pobierz zmienną w innych klasach
D. CommonUtilities
Możesz samodzielnie stworzyć klasę, która może zawierać wspólne dane, których często potrzebujesz w swoim projekcie.
Próba
E. Przekazywanie danych przez intencje
Zapoznaj się z tym samouczkiem, aby poznać tę opcję przekazywania danych.
http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/
źródło
nie musisz ...
Po prostu wywołaj newIntent () z drugiego działania
Dodaj dane do przekazania
Śmiało z setResult
I wtedy mogę skończyć
źródło
startActivityForResult ()
A oto link z SDK z dodatkowymi informacjami:
http://developer.android.com/guide/appendix/faq/commontasks.html#opennewscreen
i przewiń w dół do części zatytułowanej „Zwracanie wyniku z ekranu”
źródło
Często używam zmiennych statycznych w działaniu wywołującym ze statycznymi metodami ustawiającymi, aby je ustawić.
W ten sposób mogę dowolnie zmieniać wartości w dowolnej czynności, niezależnie od dokładnego przepływu kontroli między różnymi czynnościami.
Zwróć uwagę, że ta sztuczka może być użyta tylko wtedy, gdy nie zależy ci na utworzeniu instancji więcej niż jednej kopii tej samej czynności (klasy) w aplikacji, jednak uznałem, że jest to najłatwiejsze do zaimplementowania i używam go najczęściej .
źródło
Najlepszym sposobem na to jest umieszczenie zmiennej we wspólnej klasie, która jest zdefiniowana poza zakresem
wewnątrz twojego kodu (np. OnButtonClick itp ...)
wewnątrz kodu
@Override public void onActivityResult (int requestCode, int resultCode, Intent data) {if (requestCode == Keys.PICK_CONTACT) {if (resultCode == Activity.RESULT_OK) {Uri contactData = data.getData ();
źródło