Що таке "пакет" в додатку для Android


Відповіді:


278

Пакети зазвичай використовуються для передачі даних між різними видами діяльності 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 і cast?
lovepring

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(). (Див. Графік життєвого циклу активності в документах.)


Навіщо використовувати пакет, якщо ми можемо просто використовувати відображення? Дякую Теде!
Ruchir Baronia

4
Пакет використовується не лише у діяльності. Фрагмент також використовується для збереження станів після обертання.
Кай Ван

47

A Bundleдуже схожий на Mapоб’єкт Java, який відображає Stringключі до значень. Він використовується для передачі інформації між видами діяльності та іншими компонентами додатків. Він також використовується рамкою для збору та відновлення інформації про стан.

Причина Android не використовує Mapдля цього звичайні старі об'єкти - Mapце занадто гнучка; він може містити об'єкти (наприклад, потоки вводу / виводу), які неможливо серіалізувати. BundleAPI обмежує типи об'єктів , які можуть бути додані до пачці таким чином , що зміст згорток в гарантовано серіалізовать. Рамка Android спирається на цю властивість.

Я пропоную вам ознайомитися з документацією щодо Основ програми . Це пояснює, серед іншого, що стосується розшарувань та намірів і для чого вони використовуються.


14

Пакети можуть використовуватися для передачі довільних даних від однієї діяльності до іншої за допомогою Інтенту. Під час трансляції наміру зацікавлені дії (та інші транслятори) будуть повідомлені про це. Намір може містити пакет, щоб ви могли надсилати додаткові дані разом із наміром.

Пакети - це відображення ключових значень, тому певним чином вони схожі на хеш, але вони не суворо обмежені єдиним відображенням об'єкта String / Foo. Зауважте, що лише певні типи даних вважаються "Parcelable" і вони чітко прописані в пакеті API.


Це єдина відповідь на даний момент, щоб реально підійти до питання ОП, тобто що таке пакет. stackoverflow.com/a/6236801/1588163 дає більше інформації.
клапас

Навіщо використовувати пакет, якщо ми можемо просто використовувати відображення? Дякую!
Ruchir Baronia

@RuchirBaronia немає особливих причин використовувати пакет, якщо ви не збираєтеся передати його до частини Android API, для якої потрібні об'єкти Bundle.
скриптокаліпсис

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

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


3

Пакет: - Зіставлення значень String з різними типами парцеляції.

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

коли ми викликаємо onPause (), то onStop (), а потім у зворотному порядку onStop () до onPause ().

Збережені дані, які система використовує для відновлення попереднього стану, називаються "станом екземпляра" і являють собою сукупність пар ключів-значень, що зберігаються в об'єкті Bundle.


Картографування - це природа розшарування.
BollMose

2

пакет використовується для обміну даними між видами діяльності та збереження стану програми в методі 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.