Como passar dados de uma Activity para outra no Android?
sobes.tech IA
Resposta da IA
Existem várias formas:
-
Extras de Intent: A forma mais comum. Os dados são empacotados num
Bundlee adicionados aoIntent.// 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"); } -
Objetos Parcelable: Semelhante a
Serializable, mas mais eficiente para objetos que são frequentemente transmitidos. Requer implementação da interfaceParcelable.// 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"); -
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 -
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; -
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ê.
-
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.