O que é um "pacote" em um aplicativo Android

Respostas:

278

Geralmente, os pacotes são usados ​​para transmitir dados entre várias atividades do Android. Depende de você que tipo de valores você deseja passar, mas os pacotes configuráveis ​​podem conter todos os tipos de valores e passá-los para a nova atividade.

Você pode usá-lo assim:

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

Você pode obter os valores passados ​​fazendo:

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

Você pode encontrar mais informações em:

samtherock
fonte
3
por que não usar diretamente System.object e converter?
lovespring
78

Passe dados entre atividades usando Bundlee Intentobjetos.


Sua primeira criação de um Bundleobjeto

Bundle b = new Bundle();

Em seguida, associe os dados da cadeia armazenados na anystringchave do pacote"myname"

b.putString("myname", anystring);

Agora, crie um Intentobjeto

Intent in = new Intent(getApplicationContext(), secondActivity.class);

Passe o objeto de pacote configurável bpara a intenção

in.putExtras(b);

e comece a segunda atividade

startActivity(in);

Na segunda atividade, temos que acessar os dados passados ​​da primeira atividade

Intent in = getIntent();

Agora, você precisa obter os dados do pacote

Bundle b = in.getExtras();

Por fim, obtenha o valor dos dados da string associados à chave denominada "myname"

String s = b.getString("myname");
mahalakshmi
fonte
ESTA É MUITO BOA RESPOSTA VERBOSA, OBRIGADO POR ISSO.
Abhishek Garg
67

Eu tenho que acrescentar que os pacotes configuráveis ​​são usados ​​por atividades para passar dados para eles mesmos no futuro.

Quando a tela gira, ou quando outra atividade é iniciada, o método protected void onSaveInstanceState(Bundle outState)é chamado e a atividade é destruída. Mais tarde, outra instância da atividade é criada e public void onCreate(Bundle savedInstanceState)é chamada. Quando a primeira instância da atividade é criada, o pacote configurável é nulo; e se o pacote configurável não for nulo, a atividade continuará com alguns negócios iniciados por seu antecessor.

O Android salva o texto automaticamente nos campos de texto, mas não salva tudo e, às vezes, erros sutis aparecem.

O anti-padrão mais comum, no entanto, é assumir que onCreate()apenas a inicialização. Está errado, porque também deve restaurar o estado.

Há uma opção para desativar esse comportamento de "recriar atividade em rotação", mas não evita erros relacionados à reinicialização, apenas os torna mais difíceis de mencionar.

Observe também que o único método cuja chamada é garantida quando a atividade será destruída é onPause(). (Veja o gráfico do ciclo de vida da atividade nos documentos.)

18446744073709551615
fonte
Por que usar um pacote se podemos apenas usar um mapeamento? Obrigado Ted!
Ruchir Baronia
4
O pacote não é usado apenas por Atividade. Também é usado pelo Fragment para preservar estados após a rotação.
Kai Wang
47

A Bundleé muito parecido com um Mapobjeto Java que mapeia Stringchaves para valores. É usado para passar informações entre atividades e outros componentes de aplicativos. Também é usado pela estrutura para capturar e restaurar informações de estado.

A razão pela qual o Android não usa Mapobjetos antigos simples é que Mapé muito flexível; ele pode conter objetos (como, por exemplo, fluxos de E / S) que não podem ser serializados. A BundleAPI restringe os tipos de objetos que podem ser adicionados a um pacote configurável de forma que o conteúdo do pacote seja garantido como serializável. A estrutura do Android depende dessa propriedade.

Eu sugiro que você leia a documentação em Fundamentos de aplicativos . Isso explica, entre outras coisas, o que são pacotes e intenções e para que são usados.

Ted Hopp
fonte
14

Os pacotes podem ser usados ​​para enviar dados arbitrários de uma atividade para outra por meio de Intenções. Quando você transmite uma Intenção, as Atividades interessadas (e outros BroadcastRecievers) serão notificadas disso. Uma intenção pode conter um Bundle para que você possa enviar dados extras junto com a Intenção.

Os pacotes são mapeamentos de valores-chave, portanto, de certa forma, são como um Hash, mas não estão estritamente limitados a um único mapeamento de objeto String / Foo. Observe que apenas certos tipos de dados são considerados "Parcelable" e são explicitamente explicitados na API do pacote.

scriptocalypse
fonte
Até agora, esta é a única resposta para realmente abordar a questão do OP, ou seja, o que é um pacote. stackoverflow.com/a/6236801/1588163 fornece mais informações.
clapas
Por que usar um pacote se podemos apenas usar um mapeamento? Obrigado!
Ruchir Baronia
@RuchirBaronia, não há motivo especial para usar um Bundle, a menos que você pretenda passá-lo para parte da API do Android que requer objetos do Bundle.
Script28 #
8

Basta criar um pacote,


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

NA "this_is_the_next_class.class"

Você pode recuperar os itens como este.

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);
Bala Prasanna
fonte
5

Bundle é usado para transmitir dados entre as atividades. Você pode criar um pacote configurável, transmiti-lo ao Intent que inicia a atividade que pode ser usada na atividade de destino.

GSree
fonte
3

Pacote: - Um mapeamento dos valores da String para vários tipos de Parcelable.

Bundle é geralmente usado para transmitir dados entre várias atividades do android.

quando chamamos onPause (), então onStop () e, em ordem inversa, onStop () para onPause ().

Os dados salvos que o sistema usa para restaurar o estado anterior são chamados de "estado da instância" e são uma coleção de pares de valores-chave armazenados em um objeto Bundle.

Ahmed Ali
fonte
Um mapeamento é a natureza do pacote.
BollMose
2

bundle é usado para compartilhar dados entre atividades e para salvar o estado do aplicativo no método oncreate (), para que o aplicativo saiba onde foi parado ... Espero que ajude :)

Sandip Lawate
fonte
0

o uso de pacote envia dados de uma atividade para outra com a ajuda do objeto de intenção; O pacote retém os dados que podem ser de qualquer tipo.

Agora eu digo que como criar dados de passagem de pacote entre duas atividades.

Etapa 1: na primeira atividade

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

Etapa 2: na segunda atividade

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

Eu acho que isso é útil para você ...........

Mahendra Kumar Verma
fonte
0

O pacote configurável não é apenas para transferir dados entre dois componentes diferentes, mas, o mais importante, é usado para restaurar os valores armazenados antes que a atividade seja destruída em nova atividade.

como o texto em um EditTextwidget ou a posição de rolagem de a ListView.

Ajay Takur
fonte
0

Primeira atividade:

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

Segunda atividade:

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");
Tanoeiro
fonte
1
Você também pode querer aprender sobre exemplos mínimos, completos e verificáveis .
Daniel Corzo