Como é que se podem guardar dados fora do fragmento?
sobes.tech IA
Resposta da IA
Existem várias formas de guardar dados fora de um fragmento:
-
ViewModel: Ideal para armazenar dados relacionados com a interface de utilizador de forma consciente do ciclo de vida. Sobrevive a alterações de configuração.class MyViewModel : ViewModel() { var data: String = "" } -
Activity: Os fragmentos podem interagir com a atividade contenedora (por exemplo, através de uma interface ou diretamente), onde a atividade pode armazenar dados.
// Na Activity var sharedData: String = "" // No Fragment (activity as? MyActivity)?.sharedData = "Guardado do fragmento" -
Shared Preferences: Método simples para armazenar dados primitivos (pequenos volumes).
// No Fragment val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return with(sharedPref.edit()) { putString("saved_string", "Meus dados") apply() // Ou commit() para escrita síncrona } -
SQLite Database: Para dados estruturados e consultas mais complexas.
-- Exemplo SQL CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); -
Room Persistence Library: Abstração sobre SQLite que facilita o trabalho com bases de dados.
// Exemplo de entidade Room @Entity data class User( @PrimaryKey val id: Int, val name: String ) -
DataStore: Alternativa moderna ao Shared Preferences, permitindo armazenar dados de forma assíncrona e segura.
// Exemplo de DataStore Prefs val EXAMPLE_COUNTER = intPreferencesKey("example_counter") // No Fragment context?.dataStore?.edit { settings -> val currentCounter = settings[EXAMPLE_COUNTER] ?: 0 settings[EXAMPLE_COUNTER] = currentCounter + 1 } -
Armazenamento interno/externo: Para guardar ficheiros.
// Escrever num ficheiro val filename = "my_data.txt" val fileContents = "Olá, mundo!" context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use { it.write(fileContents.toByteArray()) } -
Singleton: Instância global de uma classe para armazenar dados, acessível de qualquer lugar na aplicação. Deve ser usado com cautela devido a potenciais problemas com testes e fugas de memória.
object DataManager { var sharedData: String = "" } -
Classe Application: Classe que estende
Application, é global para toda a aplicação e pode armazenar dados.class MyApp : Application() { var globalData: String = "" }