Relación de Intención y Bundle
Mientras utilizamos el objeto Intent podemos poner diferentes tipos de datos directamente usando su putExtra()
. También podemos poner estos datos adicionales en un objeto Bundle
y agregarlos a Intent
. Entonces, ¿por qué necesitamos Bundle
si podemos hacerlo usando Intent
directamente?
- Retraso al iniciar la actividad desde el servicio
- Selección entre cámara y galería para la selección de imágenes
- Intento vacío (excepción nullpointer) en el flujo maestro / detallado al hacer clic en "arriba" en la barra de acciones
- Android intent-filter para escuchar las direcciones de correo electrónico enviadas?
- Iniciar el nuevo marcador de Hangouts desde un intento
- Rjava.lang.IllegalArgumentException en startActivity (intención, animación de paquete)
- Iniciar Actividad con acción, pero sin categoría
- ¿Cómo puedo pasar los datos de un BroadcastReceiver a una actividad iniciada?
- Cualquier forma de saber si el dispositivo se ha iniciado desde un inicio rápido?
- Organizar la pila de navegación FragmentActivity
- ¿Cómo llamo a una intención en Retrofit Callback?
- Integración de la aplicación con los resultados de búsqueda de Google y Chrome
- ¿Qué es createChooser cuando tengo que usar Intents? ¿Qué podría hacer con este método?
A veces necesitas pasar few variables
o values
a alguna otra Activity
, pero ¿qué pasa si tienes un bunch of variable's or values
que necesitas pasar a varias Activities
. En ese caso, puede utilizar Bundle
y pasar el Bundle
a la Activity
requerida con facilidad. En lugar de pasar una sola variable cada vez.
Como puede ver, el Intent
almacena internamente en un Bundle
.
public Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putString(name, value); return this; }
Supongamos que necesita pasar un Bundle
de una Activity
a otra. Por eso Intent
permite agregar Bundle
s como campos adicionales.
EDIT : Por ejemplo, si desea pasar una fila de una base de datos junto con algunos otros datos es muy conveniente para poner esta fila en un Bundle
y agregar este Bundle
a la Intent
como un campo extra.
Supongo que lo que @Lalit significa es suponer que su actividad siempre transmite las mismas variables a diferentes intentos, puede almacenarlas todas en un solo Bundle
de su clase y simplemente usar intent.putExtras(mBundle)
siempre 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 vuelven obsoletos en su código, por ejemplo. Me gusta:
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 ya se ha dicho, Intent
almacena los parámetros en un Bundle
interno, y vale la pena notar que cuando se llama a putExtras
, el paquete Intent interno no apunta al mismo objeto, sino que crea una copia de todas las variables en su lugar, usando un simple for
así:
for (int i=0; i<array.mSize; i++) { put(array.keyAt(i), array.valueAt(i)); }
- GcmListenerService no se llama Cuando la aplicación está en segundo plano
- Eclipse: No se pudo inicializar el subproceso de supervisión: no se pudo establecer la conexión de bucle invertido