Co to jest bundlew aplikacji na Androida? Kiedy go używać?
Co to jest bundlew 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ą Bundlei Intentobiektów.
Najpierw utwórz Bundleobiekt
Bundle b = new Bundle();
Następnie powiąż dane łańcuchowe przechowywane w anystringkluczu pakietu"myname"
b.putString("myname", anystring);
Teraz stwórz Intentobiekt
Intent in = new Intent(getApplicationContext(), secondActivity.class);
Przekaż obiekt pakietu bdo 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 Bundlejest bardzo podobny do Mapobiektu Java, który mapuje Stringklucze 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 Mapdo tego zwykłych starych obiektów, ponieważ Mapjest zbyt elastyczny; może zawierać obiekty (takie jak np. strumienie we / wy), których nie można serializować. BundleAPI 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 EditTextwidż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");