Що таке bundle
додаток для Android? Коли його використовувати?
Що таке bundle
додаток для Android? Коли його використовувати?
Відповіді:
Пакети зазвичай використовуються для передачі даних між різними видами діяльності Android. Від вас залежить, який тип значень ви хочете передати, але пакети можуть містити всі типи значень і передавати їх новій діяльності.
Ви можете використовувати його так:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
Ви можете отримати передані значення, виконавши:
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
Додаткову інформацію можна знайти за адресою:
Передайте дані між різними видами діяльності , використовуючи Bundle
і Intent
об'єкти.
Перше створіть Bundle
об’єкт
Bundle b = new Bundle();
Потім пов’яжіть рядкові дані, що зберігаються в, anystring
із ключем пакета"myname"
b.putString("myname", anystring);
Тепер створіть Intent
об’єкт
Intent in = new Intent(getApplicationContext(), secondActivity.class);
Передати об'єкт зв’язку b
до наміру
in.putExtras(b);
і розпочати другу діяльність
startActivity(in);
У другій діяльності ми маємо доступ до даних, переданих від першого заняття
Intent in = getIntent();
Тепер вам потрібно отримати дані з групи
Bundle b = in.getExtras();
Нарешті, отримайте значення рядкових даних, пов'язаних з іменем ключа "myname"
String s = b.getString("myname");
Я мушу додати, що пакети використовуються діяльністю для передачі даних собі в майбутньому.
Коли екран обертається або коли починається інша діяльність, метод protected void onSaveInstanceState(Bundle outState)
викликається, а активність знищується. Пізніше створюється ще один екземпляр діяльності, public void onCreate(Bundle savedInstanceState)
який називається. Коли створюється перший екземпляр діяльності, пакет є нульовим; і якщо пакет не є нульовим, діяльність продовжує деякий бізнес, розпочатий його попередником.
Android автоматично зберігає текст у текстових полях, але це не економить усе, а іноді з’являються непомітні помилки.
Однак найпоширенішим антидіаграмою є припущення, що onCreate()
це просто ініціалізація. Це неправильно, бо воно також має відновити стан.
Існує можливість відключити цю поведінку "відновити діяльність при обертанні", але це не запобіжить помилкам, пов’язаним із перезапуском, просто ускладнить їх згадування.
Зауважте також, що єдиний метод, виклик якого гарантований, коли діяльність буде знищена, - це onPause()
. (Див. Графік життєвого циклу активності в документах.)
A Bundle
дуже схожий на Map
об’єкт Java, який відображає String
ключі до значень. Він використовується для передачі інформації між видами діяльності та іншими компонентами додатків. Він також використовується рамкою для збору та відновлення інформації про стан.
Причина Android не використовує Map
для цього звичайні старі об'єкти - Map
це занадто гнучка; він може містити об'єкти (наприклад, потоки вводу / виводу), які неможливо серіалізувати. Bundle
API обмежує типи об'єктів , які можуть бути додані до пачці таким чином , що зміст згорток в гарантовано серіалізовать. Рамка Android спирається на цю властивість.
Я пропоную вам ознайомитися з документацією щодо Основ програми . Це пояснює, серед іншого, що стосується розшарувань та намірів і для чого вони використовуються.
Пакети можуть використовуватися для передачі довільних даних від однієї діяльності до іншої за допомогою Інтенту. Під час трансляції наміру зацікавлені дії (та інші транслятори) будуть повідомлені про це. Намір може містити пакет, щоб ви могли надсилати додаткові дані разом із наміром.
Пакети - це відображення ключових значень, тому певним чином вони схожі на хеш, але вони не суворо обмежені єдиним відображенням об'єкта String / Foo. Зауважте, що лише певні типи даних вважаються "Parcelable" і вони чітко прописані в пакеті API.
Просто створіть пакет,
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);
В "this_is_the_next_class.class"
Ви можете отримати подібні предмети.
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);
Пакет: - Зіставлення значень String з різними типами парцеляції.
Пакет зазвичай використовується для передачі даних між різними видами діяльності Android.
коли ми викликаємо onPause (), то onStop (), а потім у зворотному порядку onStop () до onPause ().
Збережені дані, які система використовує для відновлення попереднього стану, називаються "станом екземпляра" і являють собою сукупність пар ключів-значень, що зберігаються в об'єкті Bundle.
пакет використовується для обміну даними між видами діяльності та збереження стану програми в методі oncreate (), щоб програма дізналася, де вона зупинена ... Я сподіваюся, що це допомагає :)
використання пакетної передачі даних від однієї діяльності до іншої діяльності за допомогою об'єкта наміру; У пакеті зберігаються дані будь-якого типу.
Тепер я розповідаю, як створити дані про проходження зв’язку між двома діями.
Крок 1: Перша діяльність
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
Крок 2: Про другу активність
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
Я думаю, що це корисно для вас ...........
Пакет - це не тільки для передачі даних між двома різними компонентами, але ще важливіше, що він використовується для відновлення значень, що зберігаються до того, як діяльність буде знищена в нову діяльність.
наприклад текст у EditText
віджеті або позиція прокрутки a ListView
.
Перша діяльність:
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());
Другий вид діяльності:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");