android - startactivity - Relación de intención y paquete
startactivity android studio (4)
Al usar el objeto Intento, podemos poner diferentes tipos de datos directamente usando su putExtra()
. También podemos poner estos datos adicionales en un objeto Bundle
y agregarlo a Intent
. Entonces, ¿por qué necesitamos Bundle
si podemos hacerlo usando Intent
directamente?
En ocasiones, necesita pasar solo few variables
o values
a otra Activity
, pero ¿qué sucede si tiene una gran cantidad bunch of variable''s or values
que debe pasar a diversas Activities
? En ese caso, puede usar Bundle
y pasar el Bundle
a la Activity
requerida con facilidad. En lugar de pasar una sola variable cada vez.
Supongamos que necesita pasar un Bundle
de una Activity
a otra. Es por eso que Intent
permite agregar Bundle
s como campos adicionales.
EDITAR : por ejemplo, si desea pasar una fila de una base de datos junto con otros datos, es muy conveniente colocar esta fila en un Bundle
y agregar este Bundle
al Intent
como un campo adicional.
Como puede ver, 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;
}
Supongo que lo que significa @Lalit es suponer que tu actividad siempre pasa las mismas variables a diferentes intentos, puedes almacenarlas todas en un solo Bundle
en tu clase y simplemente usar intent.putExtras(mBundle)
siempre que necesites 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. 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 mencionó, Intent
almacena los parámetros en un Bundle
interno, y vale la pena señalar que cuando llamas a putExtras
, el paquete Intent interno no apunta al mismo objeto, sino que crea una copia de todas las variables, utilizando un simple for
así:
for (int i=0; i<array.mSize; i++) {
put(array.keyAt(i), array.valueAt(i));
}