2011-09-24 10 views
10

Al utilizar el objeto de intención podemos poner diferentes tipos de datos directamente usando su putExtra(). También podemos poner estos datos adicionales en un objeto Bundle y agregarlo al Intent. Entonces, ¿por qué necesitamos Bundle si podemos hacerlo usando Intent directamente?Relación de intención y paquete

Respuesta

7

A veces se necesita pasar sólo few variablesvalues o con algún otro Activity, pero lo que si usted tiene un bunch of variable's or values que necesita pasar a varios Activities. En ese caso, puede usar Bundle y pasar el Bundle al Activity requerido con facilidad. En lugar de pasar una sola variable cada vez.

+1

Lo siento pero esto es incorrecto, verifique mi respuesta para saber por qué. – Reno

+0

'mExtras = new Bundle();' ¿no es esto lo suficientemente convincente? Si no, vaya a verificar el código fuente de 'Intent.java' usted mismo. – Reno

3

Supongamos que necesita pasar un Bundle de un Activity a otro. Es por eso que Intent le permite agregar Bundle s como campos adicionales.

EDITAR: Por ejemplo, si desea pasar una fila de una base de datos junto con algunos otros datos que es muy conveniente para poner esto en una fila Bundle y añadir esta Bundle a la Intent como un campo adicional.

+0

¿Me pregunto por qué? vamos a poner los mismos datos adicionales en paquete y agregar ese paquete en el objeto de intención. Que podemos poner directamente en el objeto de intento. ¿No es así? –

+0

No, no lo es. Usted puede simplemente tener un 'Bundle' que necesita pasar. ¿De verdad quieres copiarlo campo por campo al 'Intento'. ¿Y si las teclas del 'Bundle' y' Intent' se superponen? No puede saber todas las cosas que hace la gente, solo recuerde que puede poner un 'Bundle' en' Intent' y cuando lo necesite sabrá qué hacer. – Michael

+0

Un pequeño ejemplo: desea pasar una fila desde una base de datos junto con algunos otros datos. Es muy conveniente almacenar esta fila en un 'Bundle'. En una de mis aplicaciones utilizo una lista de 'Bundle's para pasar varias filas de una base de datos. – Michael

15

Como puede ver, el Intent lo almacena internamente en un Bundle.

public Intent putExtra(String name, String value) { 
    if (mExtras == null) { 
     mExtras = new Bundle(); 
    } 
    mExtras.putString(name, value); 
    return this; 
} 
1

Creo que lo que significa es @Lalit suponiendo su actividad pasa siempre las mismas variables a diferentes intenciones, puede almacenar todos ellos en un solo Bundle en su clase y sólo tiene que utilizar intent.putExtras(mBundle) cada vez que necesite el mismo conjunto de parámetros.

Eso haría más fácil cambiar el código si uno de los parámetros se vuelve obsoleto en su código, por ejemplo. Al igual que:

public class MyActivity { 
    private Bundle mBundle; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mBundle = new Bundle(); 
     mBundle.putString("parameter1", value1); 
     mBundle.putString("parameter2", value2); 
    } 
    private void openFirstActivity() { 
     Intent intent = new Intent(this, FirstActivity.class); 
     intent.putExtras(mBundle); 
     startActivity(intent); 
    } 
    private void openSecondActivity() { 
     Intent intent = new Intent(this, SecondActivity.class); 
     intent.putExtras(mBundle); 
     startActivity(intent); 
    } 
} 

OBS: Como se ha dicho ya, Intent almacena los parámetros de un interno Bundle, y vale la pena señalar que cuando se llama a putExtras, el haz de Intención interna no apuntan al mismo objeto, pero crea una copia de todas las variables en su lugar, usando un simple for como este:

for (int i=0; i<array.mSize; i++) { 
    put(array.keyAt(i), array.valueAt(i)); 
} 
Cuestiones relacionadas