Что такое «комплект» в приложении для Android


Ответы:


279

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

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

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

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

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

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


3
почему бы просто не использовать System.object и привести?
родник

79

Передача данных между действиями с помощью 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");

ЭТО ДЕЙСТВИТЕЛЬНО ХОРОШИЙ ГЛАГОЛЬНЫЙ ОТВЕТ, СПАСИБО ЗА ЭТО.
Абхишек

68

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

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

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

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

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

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


Зачем использовать пакет, если мы можем просто использовать отображение? Спасибо Тед!
Ручир Барония

4
Bundle используется не только Activity. Он также используется Fragment для сохранения состояний после поворота.
Кай Ван

48

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

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

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


14

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

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


Пока это единственный ответ, который действительно подходит к вопросу ОП, то есть что такое пакет. stackoverflow.com/a/6236801/1588163 дает больше идей.
Clapas

Зачем использовать пакет, если мы можем просто использовать отображение? Спасибо!
Ручир Барония

@RuchirBaronia нет особой причины использовать Bundle, если вы не собираетесь передавать его в часть Android API, для которой требуются объекты Bundle.
scriptocalypse

8

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


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

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


3

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

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

когда мы вызываем onPause (), затем onStop () и затем в обратном порядке onStop () для onPause ().

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


Отображение, это природа расслоения.
BollMose

2

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


0

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

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

Шаг 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");

Я думаю, что это полезно для вас ...........


0

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

такой как текст в EditTextвиджете или позиция прокрутки a ListView.


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.