¿Cómo se pueden transferir datos de una Activity a otra en Android?
sobes.tech AI
Respuesta de la IA
Existen varias formas:
-
Extras de Intent: La forma más común. Los datos se empaquetan en un
Bundley se añaden alIntent.// En la primera Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("clave", "valor"); // Tipos primitivos intent.putExtra("objeto", new MySerializableObject()); // Serializable startActivity(intent); // En la segunda Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String valor = extras.getString("clave"); MySerializableObject objeto = (MySerializableObject) extras.getSerializable("objeto"); } -
Objetos Parcelable: Similar a
Serializable, pero más eficiente para objetos que se transmiten con frecuencia. Requiere implementar la interfazParcelable.// En la primera Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("objeto_parcelable", new MyParcelableObject()); startActivity(intent); // En la segunda Activity Intent intent = getIntent(); MyParcelableObject objetoParcelable = intent.getParcelableExtra("objeto_parcelable"); -
Shared Preferences: Adecuado para transmitir pequeños volúmenes de datos que deben persistir entre ejecuciones de la aplicación.
// En la primera Activity SharedPreferences preferences = getSharedPreferences("mis_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("clave", "valor"); editor.apply(); // o commit() // En la segunda Activity SharedPreferences preferences = getSharedPreferences("mis_prefs", MODE_PRIVATE); String valor = preferences.getString("clave", null); // null es el valor por defecto -
Variables estáticas: No se recomienda, ya que viola los principios de POO y puede causar fugas de memoria. Úsese con precaución y solo en casos muy simples.
// En una clase estática o cualquier otra variable estática accesible public static String datosEstaticos; // En la primera Activity StaticDataHolder.datosEstaticos = "datos"; // En la segunda Activity String datos = StaticDataHolder.datosEstaticos; -
Base de datos/Archivo: Para grandes volúmenes de datos o datos que deben ser persistentes. Los datos se almacenan en una base de datos (SQLite, Room) o en un archivo, y la segunda Activity los lee.
-
ViewModel (junto con LiveData): En el contexto de componentes arquitectónicos, ViewModel es la forma preferida de gestionar datos y lógica relacionada con la UI. Los datos entre Activities se transmiten a través de un ViewModel compartido o mediante eventos en LiveData.
// En la primera Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("clave_datos", "valor_dato") } startActivity(intent) // En la segunda Activity (Kotlin) val dato = intent.getStringExtra("clave_datos")
La elección del método depende del tipo y volumen de datos transmitidos, así como de los requisitos de persistencia. La transmisión de datos a través de Extras de Intent es el estándar para volúmenes pequeños y transiciones directas entre Activities.