Sobes.tech
Junior

¿Cómo pasar datos de una actividad a otra en Android?

sobes.tech AI

Respuesta de la IA

Los datos se pueden transmitir usando Intent:

  1. En la Activity de origen: Coloca los datos en los Extras del Intent usando métodos como putExtra(String key, value).

    // Preparando el Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Añadiendo datos
    intent.putExtra("myString", "Hola desde la primera Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Se pueden pasar objetos que implementen Parcelable o Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Iniciando la nueva Activity
    startActivity(intent)
    
  2. En la Activity de destino: Extrae los datos de los Extras del Intent recibido en el método onCreate o onNewIntent.

    // En onCreate() de la Activity de destino
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Obteniendo el Intent que inició esta Activity
        val intent = intent
    
        // Extrayendo datos por clave
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // El segundo argumento es el valor por defecto
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Procesando los datos extraídos
        println("Cadena recibida: $myString")
        println("Número recibido: $myInt")
        println("Booleano recibido: $myBool")
    
        // Para objetos Parcelable o Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Otros métodos para transmitir datos, adecuados para escenarios más complejos o grandes volúmenes de datos:

  • ViewModel compartido entre Fragmentos/Activities (a través de SharedViewModel): Conveniente para datos comunes entre componentes relacionados.
  • Bundle (dentro de Extras del Intent): putExtra en realidad usa un Bundle interno.
  • Variables estáticas/singletons: Se debe usar con precaución, ya que pueden causar fugas de memoria y problemas de estado.
  • Base de datos/SharedPreferences: Para almacenamiento persistente o transmisión de datos que requieren ser guardados.
  • Event Bus (por ejemplo, EventBus, RxJava): Para transmitir eventos o datos entre componentes de forma asíncrona.
  • File I/O: Guardar en archivos y leer desde ellos.