studio startactivity intent developer desde boton activity abrir android android-intent

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