2011-02-15 14 views

Respuesta

225

Los paquetes se utilizan generalmente para pasar datos entre varias actividades de Android. Depende de usted qué tipo de valores desea aprobar, pero los paquetes pueden contener todos los tipos de valores y pasarlos a la nueva actividad.

Se puede utilizar la siguiente manera:

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

, usted puede obtener los valores que pasa haciendo:

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

Puede encontrar más información en:

+2

¿por qué no usar directamente System.object y cast? – lovespring

5

El paquete se usa para pasar datos entre Actividades. Puede crear un paquete, pasarlo a Intención que inicia la actividad que luego se puede usar desde la actividad de destino.

+0

Gsree gracias ,, cuál es el papel de la intención – User

+0

También es utilizado por una actividad para guardar y recuperar su estado cuando se apaga y reiniciado (como cuando se gira el dispositivo). –

+1

@Tushar Compruebe el enlace en la respuesta de @Ted Hopp. Eso explicará más sobre Intención y Actividades. – GSree

14

Los paquetes se pueden utilizar para enviar datos arbitrarios de una actividad a otra por medio de Intents. Cuando transmita un Intento, las Actividades interesadas (y otros BroadcastRecievers) serán notificados de esto. Un intento puede contener un paquete para que pueda enviar datos adicionales junto con el Intento.

Los lotes son correlaciones de valores-clave, por lo que en cierta forma son como un Hash, pero no están estrictamente limitados a un solo mapeo de objeto String/Foo. Tenga en cuenta que solo ciertos tipos de datos se consideran "Parcelable" y están explícitamente detallados en la API Bundle.

+0

Esta es la única respuesta hasta ahora para acercarse realmente a la pregunta del OP, es decir, qué es un paquete. http://stackoverflow.com/a/6236801/1588163 brinda más información. – clapas

+0

¿Por qué usar un paquete si solo podemos usar un mapeo? ¡Gracias! –

+0

@RuchirBaronia no hay ninguna razón especial para usar un paquete a menos que pretenda pasarlo a una parte de la API de Android que requiere objetos Bundle. – scriptocalypse

22

A Bundle es muy parecido a un objeto Java Map que asigna claves String a los valores. Se usa para pasar información entre actividades y otros componentes de la aplicación. También lo utiliza el marco para capturar y restaurar información de estado.

El motivo por el que Android no usa objetos antiguos simples Map es Map demasiado flexible; puede contener objetos (como, por ejemplo, flujos de E/S) que no se pueden serializar. La API Bundle restringe los tipos de objetos que se pueden agregar a un paquete de modo que se garantiza que los contenidos del paquete sean serializables. El marco Android se basa en esta propiedad.

Le sugiero que lea la documentación en Application Fundamentals. Esto explica, entre otras cosas, qué paquetes e intenciones son y para qué se utilizan.

+0

¿Por qué usar un paquete si solo podemos usar un mapeo? Gracias Ted! –

+0

@RuchirBaronia: la API utiliza 'Bundle' en varios lugares donde no se puede usar un' Map'. Por ejemplo, si va a usar un 'Intento', puede pasar datos adicionales usando' Bundle' (con 'putExtra (String, Bundle)' o 'putExtras (Bundle)'. No hay API para pasar un ' Map' (que puede contener fácilmente datos no serializables) con un 'Intento'. –

+0

¿No podemos hacer' putExtra (MapObj) '? Gracias –

60

Tengo que añadir que los paquetes son utilizados por las actividades para pasar datos a sí mismos en el futuro.

Cuando la pantalla gira, o cuando se inicia otra actividad, se invoca el método protected void onSaveInstanceState(Bundle outState), y la actividad se destruye. Más tarde, se crea otra instancia de la actividad y se llama al public void onCreate(Bundle savedInstanceState). Cuando se crea la primera instancia de actividad, el paquete es nulo; y si el paquete no es nulo, la actividad continúa algún negocio iniciado por su predecesor.

Android guarda automáticamente el texto en campos de texto, pero no guarda todo, y a veces aparecen errores sutiles.

El antipatrón más común, sin embargo, supone que onCreate() hace la inicialización. Está mal, porque también debe restaurar el estado.

Existe la opción de desactivar este comportamiento de "volver a crear actividad en rotación", pero no evitará errores relacionados con el reinicio, solo los hará más difíciles de mencionar.

Tenga en cuenta también que el único método cuya llamada está garantizada cuando se destruirá la actividad es onPause(). (Véase el gráfico de ciclo de vida actividad en los docs.)

+0

¿Por qué usar un paquete si solo podemos usar un mapeo? Gracias Ted! –

+1

Bundle no solo es utilizado por Activity. También es utilizado por Fragment para preservar estados después de rotar. –

53

datos pasan entre las actividades de mediante el uso de Bundle y Intent objetos.


Su primera crear un objeto Bundle

Bundle b = new Bundle(); 

A continuación, asociar los datos de cadena almacenados en anystring con el paquete clave "myname"

b.putString("myname", anystring); 

Ahora, cree un objeto Intent

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

Pass haz objeto b a la intención

in.putExtras(b); 

y empezar a segunda actividad

startActivity(in); 

En la segunda actividad, tenemos que acceder a los datos que se pasan de la primera actividad

Intent in = getIntent(); 

Ahora, usted que obtener los datos del paquete

Bundle b = in.getExtras(); 

Por último, obtener el valor de los datos de cadena asociados con la clave denominada "myname"

String s = b.getString("myname"); 
2

paquete se utiliza para compartir datos entre las actividades, y para guardar el estado de aplicación en el método OnCreate() para que la aplicación se llega a saber en que se detuvo ... espero que ayude :)

7

Basta con crear un paquete,


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

en el "this_is_the_next_class.class"

Se pueden recoger los artículos como esto.

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

uso del paquete enviar datos de una actividad a otra actividad con la ayuda del objeto intent; El paquete contiene los datos que pueden ser de cualquier tipo.

Ahora le digo que cómo crear paquetes que pasan datos entre dos actividades.

Paso 1: En primer lugar la actividad

Bundle b=new Bundle(); 

b.putString("mkv",anystring); 

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

in.putExtras(b); 

startActivity(in); 

Paso 2: En segundo lugar Actividad

Intent in=getIntent(); 

Bundle b=in.getExtras(); 

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

creo que esto es útil para usted ...........

0

El paquete no es solo para transferir datos entre dos componentes diferentes, sino que se usa para restaurar los valores almacenados antes de que la actividad se destruya en una nueva actividad.

como el texto en un widget EditText o la posición de desplazamiento de ListView.

3

Paquete: - Un mapeo de valores de Cadena a varios tipos Parcelable.

Bundle se usa generalmente para pasar datos entre diversas actividades de Android.

cuando llamamos aPause() y luego a OnStop() y luego en orden inverso a Detener() a onPause().

Los datos guardados que el sistema usa para restaurar el estado anterior se llaman "estado de instancia" y son una colección de pares clave-valor almacenados en un objeto Bundle.

+0

Un mapeo, es la naturaleza del paquete. – BollMose

0

Primera actividad:

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 acción:

String food = getIntent().getExtras().getString("food"); 
Boolean rb = getIntent().getExtras().getBoolean("rb"); 
+1

Es posible que también desee obtener más información sobre [Ejemplos mínimos, completos y verificables] (http://stackoverflow.com/help/mcve). –

Cuestiones relacionadas