Co to jest bundle
w aplikacji na Androida? Kiedy go używać?
Co to jest bundle
w aplikacji na Androida? Kiedy go używać?
Odpowiedzi:
Pakiety są zwykle używane do przesyłania danych między różnymi działaniami systemu Android. To zależy od Ciebie, jaki typ wartości chcesz przekazać, ale pakiety mogą przechowywać wszystkie typy wartości i przekazywać je do nowej aktywności.
Możesz użyć tego w następujący sposób:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
Możesz uzyskać przekazane wartości, wykonując:
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
Możesz znaleźć więcej informacji na:
Przekaż dane między czynnościami za pomocą Bundle
i Intent
obiektów.
Najpierw utwórz Bundle
obiekt
Bundle b = new Bundle();
Następnie powiąż dane łańcuchowe przechowywane w anystring
kluczu pakietu"myname"
b.putString("myname", anystring);
Teraz stwórz Intent
obiekt
Intent in = new Intent(getApplicationContext(), secondActivity.class);
Przekaż obiekt pakietu b
do celu
in.putExtras(b);
i rozpocznij drugą aktywność
startActivity(in);
W drugim działaniu musimy uzyskać dostęp do danych przekazanych z pierwszego działania
Intent in = getIntent();
Teraz musisz pobrać dane z pakietu
Bundle b = in.getExtras();
Na koniec uzyskaj wartość danych ciągu powiązanych z kluczem o nazwie "myname"
String s = b.getString("myname");
Muszę dodać, że pakiety są wykorzystywane przez działania do przekazywania danych sobie w przyszłości.
Gdy ekran się obraca lub gdy uruchamiane jest inne działanie, metoda protected void onSaveInstanceState(Bundle outState)
jest wywoływana, a działanie jest niszczone. Później tworzona jest kolejna instancja działania orazpublic void onCreate(Bundle savedInstanceState)
jest wywoływane. Po utworzeniu pierwszego wystąpienia działania pakiet ma wartość NULL; a jeśli pakiet nie ma wartości zerowej, działalność kontynuuje część działalności rozpoczętej przez jej poprzednika.
Android automatycznie zapisuje tekst w polach tekstowych, ale nie zapisuje wszystkiego i czasami pojawiają się subtelne błędy.
Najczęstszym anty-wzorcem jest jednak założenie, że onCreate()
właśnie inicjuje. To jest złe, ponieważ musi także przywrócić stan.
Istnieje możliwość wyłączenia tego zachowania polegającego na ponownym tworzeniu aktywności podczas obracania, ale nie zapobiegnie to błędom związanym z ponownym uruchomieniem, a jedynie utrudni ich wspomnienie.
Zauważ również, że jedyną metodą, której wywołanie jest gwarantowane, gdy działanie ma zostać zniszczone, jest onPause()
. (Zobacz wykres cyklu życia aktywności w dokumentach.)
A Bundle
jest bardzo podobny do Map
obiektu Java, który mapuje String
klucze na wartości. Służy do przekazywania informacji między działaniami a innymi komponentami aplikacji. Jest również wykorzystywany przez środowisko do przechwytywania i przywracania informacji o stanie.
Android nie używa Map
do tego zwykłych starych obiektów, ponieważ Map
jest zbyt elastyczny; może zawierać obiekty (takie jak np. strumienie we / wy), których nie można serializować. Bundle
API ogranicza typy obiektów, które mogą być dodawane do wiązki w taki sposób, że zawartość wiązki są gwarantowane być możliwy do serializacji. Struktura systemu Android opiera się na tej właściwości.
Sugeruję przeczytanie dokumentacji na temat Podstawy aplikacji . To wyjaśnia między innymi, jakie są pakiety i zamiary i do czego są używane.
Pakiety mogą służyć do wysyłania dowolnych danych z jednego działania do drugiego za pomocą Intencji. Gdy transmitujesz zamiar, zainteresowane działania (i inne BroadcastRecievers) zostaną o tym powiadomione. Intencja może zawierać pakiet, dzięki czemu można wysłać dodatkowe dane wraz z intencją.
Pakiety są odwzorowaniami klucz-wartość, więc w pewnym sensie przypominają skrót, ale nie są ściśle ograniczone do pojedynczego odwzorowania obiektu String / Foo. Pamiętaj, że tylko niektóre typy danych są uważane za „możliwe do paczkowania” i są wyraźnie określone w interfejsie API pakietu.
Po prostu stwórz pakiet,
Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);
W „this_is_the_next_class.class”
Możesz odzyskać takie przedmioty.
Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
Pakiet: - Odwzorowanie wartości ciągów na różne typy działek.
Pakiet jest zwykle używany do przesyłania danych między różnymi działaniami Androida.
kiedy wywołujemy onPause (), następnie onStop (), a następnie w odwrotnej kolejności onStop () do onPause ().
Zapisane dane, których system używa do przywrócenia poprzedniego stanu, nazywane są „stanem instancji” i są zbiorem par klucz-wartość przechowywanych w obiekcie pakietu.
Pakiet służy do udostępniania danych między działaniami oraz do zapisywania stanu aplikacji w metodzie oncreate (), dzięki czemu aplikacja dowie się, gdzie została zatrzymana ... Mam nadzieję, że to pomoże :)
użycie pakietu wysyła dane z jednego działania do drugiego za pomocą obiektu docelowego; Pakiet zawiera dane dowolnego typu.
Teraz mówię, jak utworzyć pakiet przekazywania danych między dwoma działaniami.
Krok 1: Przy pierwszej aktywności
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
Krok 2: Przy drugiej aktywności
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
Myślę, że jest to przydatne dla Ciebie ...........
Pakiet służy nie tylko do przesyłania danych między dwoma różnymi komponentami, ale co ważniejsze, służy do przywracania wartości przechowywanych przed zniszczeniem działania do nowego działania.
takich jak tekst w EditText
widżecie lub pozycja przewijania w ListView
.
Pierwsza aktywność:
String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());
Druga aktywność:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");