Sobes.tech
Junior

Como passar dados de uma atividade para outra no Android?

sobes.tech IA

Resposta da IA

Os dados podem ser transmitidos usando Intent:

  1. Na Activity de origem: Coloque os dados nos Extras do Intent usando métodos como putExtra(String key, value).

    // Preparando o Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Adicionando dados
    intent.putExtra("myString", "Olá do primeiro Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Pode passar objetos que implementem Parcelable ou Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Iniciando a nova Activity
    startActivity(intent)
    
  2. Na Activity de destino: Extraia os dados dos Extras do Intent recebido no método onCreate ou onNewIntent.

    // No onCreate() da Activity de destino
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Obtendo o Intent que iniciou esta Activity
        val intent = intent
    
        // Extraindo dados por chave
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Segundo argumento: valor padrão
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Processando os dados extraídos
        println("String recebida: $myString")
        println("Número recebido: $myInt")
        println("Booleano recebido: $myBool")
    
        // Para objetos Parcelable ou Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Outros métodos de transmissão de dados, adequados para cenários mais complexos ou grandes volumes de dados:

  • ViewModel compartilhado entre Fragmentos/Activities (via SharedViewModel): Conveniente para dados comuns entre componentes relacionados.
  • Bundle (dentro de Extras do Intent): putExtra na verdade usa um Bundle interno.
  • Variáveis estáticas/singletons: Deve ser usado com cautela, pois podem levar a vazamentos de memória e problemas de estado.
  • Base de dados/SharedPreferences: Para armazenamento ou transmissão persistente de dados que requerem armazenamento.
  • Event Bus (por exemplo, EventBus, RxJava): Para transmitir eventos ou dados entre componentes de forma assíncrona.
  • File I/O: Salvando em arquivo e lendo dele.