Sobes.tech
Junior

¿Cómo se pueden transferir datos de una Activity a otra en Android?

sobes.tech AI

Respuesta de la IA

Existen varias formas:

  1. Extras de Intent: La forma más común. Los datos se empaquetan en un Bundle y se añaden al Intent.

    // 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");
    }
    
  2. Objetos Parcelable: Similar a Serializable, pero más eficiente para objetos que se transmiten con frecuencia. Requiere implementar la interfaz Parcelable.

    // 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");
    
  3. 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
    
  4. 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;
    
  5. 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.

  6. 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.