Sobes.tech
Junior

Como passar dados de uma Activity para outra no Android?

sobes.tech IA

Resposta da IA

Existem várias formas:

  1. Extras de Intent: A forma mais comum. Os dados são empacotados num Bundle e adicionados ao Intent.

    // Na primeira Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("chave", "valor"); // Tipos primitivos
    intent.putExtra("objeto", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Na segunda Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String valor = extras.getString("chave");
        MySerializableObject objeto = (MySerializableObject) extras.getSerializable("objeto");
    }
    
  2. Objetos Parcelable: Semelhante a Serializable, mas mais eficiente para objetos que são frequentemente transmitidos. Requer implementação da interface Parcelable.

    // Na primeira Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("objeto_parcelable", new MyParcelableObject());
    startActivity(intent);
    
    // Na segunda Activity
    Intent intent = getIntent();
    MyParcelableObject objetoParcelable = intent.getParcelableExtra("objeto_parcelable");
    
  3. Shared Preferences: Adequado para transmitir pequenos volumes de dados que precisam de persistência entre execuções da aplicação.

    // Na primeira Activity
    SharedPreferences preferences = getSharedPreferences("minhas_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("chave", "valor");
    editor.apply(); // ou commit()
    
    // Na segunda Activity
    SharedPreferences preferences = getSharedPreferences("minhas_prefs", MODE_PRIVATE);
    String valor = preferences.getString("chave", null); // null é o valor padrão
    
  4. Variáveis estáticas: Não recomendado, pois viola princípios de POO e pode causar fugas de memória. Use com cautela e apenas para casos muito simples.

    // Em uma classe estática ou qualquer outra variável estática acessível
    public static String dadosEstaticos;
    
    // Na primeira Activity
    StaticDataHolder.dadosEstaticos = "dados";
    
    // Na segunda Activity
    String dados = StaticDataHolder.dadosEstaticos;
    
  5. Base de dados/Arquivo: Para grandes volumes de dados ou dados que precisam ser persistentes. Os dados são armazenados em uma base de dados (SQLite, Room) ou arquivo, e a segunda Activity os lê.

  6. ViewModel (junto com LiveData): No contexto de componentes arquiteturais, ViewModel é a forma preferida de gerir dados e lógica relacionada com a UI. Os dados entre Activities são transmitidos através de um ViewModel partilhado ou por eventos no LiveData.

    // Na primeira Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("chave_dados", "valor_dado")
    }
    startActivity(intent)
    
    // Na segunda Activity (Kotlin)
    val dado = intent.getStringExtra("chave_dados")
    

A escolha do método depende do tipo e volume de dados a transmitir, bem como dos requisitos de persistência. Transmitir dados através de Extras de Intent é o padrão para pequenos volumes de dados e transições diretas entre Activities.