Что такое «комплект» в приложении для Android - PullRequest
260 голосов
/ 15 февраля 2011

Что такое bundle в приложении для Android? Когда его использовать?

Ответы [ 12 ]

267 голосов
/ 15 февраля 2011

Пакеты обычно используются для передачи данных между различными действиями Android. От вас зависит, какой тип значений вы хотите передать, но пакеты могут содержать все типы значений и передавать их новому действию.

Вы можете использовать это так:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

Вы можете получить переданные значения, выполнив:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

Вы можете найти больше информации по адресу:

66 голосов
/ 12 августа 2012

Передача данных между действиями с использованием 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");
64 голосов
/ 31 мая 2012

Я должен добавить, что пакеты используются действиями для передачи данных себе в будущем.

Когда экран поворачивается или когда запускается другое действие, вызывается метод protected void onSaveInstanceState(Bundle outState), и действие уничтожается.Позже создается другой экземпляр действия, и вызывается public void onCreate(Bundle savedInstanceState).Когда первый экземпляр действия создан, пакет является нулевым;и если пакет не равен NULL, действие продолжается, если какое-то дело было начато его предшественником.

Android автоматически сохраняет текст в текстовых полях, но не все, и иногда появляются небольшие ошибки.

Самый распространенный анти-паттерн, тем не менее, предполагает, что onCreate() выполняет только инициализацию.Это неверно, потому что он также должен восстанавливать состояние.

Существует возможность отключить это поведение «воссоздать активность при вращении», но это не предотвратит ошибки, связанные с перезапуском, а просто сделает ихболее сложно упомянуть.

Обратите также внимание, что единственный метод, вызов которого гарантирован, когда действие будет уничтожено, - onPause().(См. График жизненного цикла активности в документации.)

37 голосов
/ 15 февраля 2011

A Bundle очень похож на объект Java Map, который сопоставляет String ключи со значениями. Он используется для передачи информации между действиями и другими компонентами приложения. Он также используется платформой для сбора и восстановления информации о состоянии.

Причина, по которой Android не использует старые Map объекты, заключается в том, что Map слишком гибок; он может содержать объекты (например, потоки ввода / вывода), которые нельзя сериализовать. API Bundle ограничивает типы объектов, которые могут быть добавлены в пакет, таким образом, что содержимое пакета гарантированно будет сериализуемым. Платформа Android опирается на это свойство.

Я предлагаю вам прочитать документацию по Основы применения . Это объясняет, среди прочего, что такое связки и намерения и для чего они используются.

14 голосов
/ 15 февраля 2011

Связки могут использоваться для отправки произвольных данных из одного действия в другое посредством Intents.Когда вы передаете Намерение, заинтересованные Действия (и другие BroadcastRecievers) будут уведомлены об этом.Намерение может содержать Пакет, так что вы можете отправлять дополнительные данные вместе с Намерением.

Пакеты являются отображениями ключ-значение, так что они в некотором роде похожи на Хэш, но не строго ограничены однимОтображение объекта String / Foo.Обратите внимание, что только определенные типы данных считаются «Parcelable», и они явно прописаны в Bundle API.

7 голосов
/ 11 февраля 2014

Просто создайте связку,


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);
5 голосов
/ 15 февраля 2011

Пакет используется для передачи данных между операциями. Вы можете создать пакет, передать его в Intent, который запускает действие, которое затем можно использовать из действия назначения.

3 голосов
/ 16 августа 2015

Bundle: - Отображение значений String в различные типы Parcelable.

Bundle обычно используется для передачи данных между различными действиями Android.) и затем в обратном порядке от onStop () до onPause ().

Сохраненные данные, которые система использует для восстановления предыдущего состояния, называются «состоянием экземпляра» и представляют собой набор пар ключ-значение, хранящихся вобъект Bundle.

2 голосов
/ 29 июля 2013

пакет используется для обмена данными между действиями, и сохранить состояние приложения в методе oncreate (), чтобы приложение узнало, где оно было остановлено ... Надеюсь, это поможет:)

0 голосов
/ 21 декабря 2016

Первое занятие:

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");
...