Comment peut-on sauvegarder des données en dehors du fragment ?
sobes.tech IA
Réponse de l'IA
Il existe plusieurs façons de stocker des données en dehors d'un fragment :
-
ViewModel: Idéal pour stocker des données liées à l'interface utilisateur de manière consciente du cycle de vie. Survive aux changements de configuration.class MyViewModel : ViewModel() { var data: String = "" } -
Activity : Les fragments peuvent interagir avec l'activité conteneur (par exemple, via une interface ou directement), où l'activité peut stocker des données.
// Dans l'Activity var sharedData: String = "" // Dans le Fragment (activity as? MyActivity)?.sharedData = "Enregistré depuis le fragment" -
Shared Preferences : Méthode simple pour stocker des données primitives (petits volumes).
// Dans le Fragment val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return with(sharedPref.edit()) { putString("saved_string", "Mes données") apply() // Ou commit() pour écriture synchrone } -
SQLite Database : Pour des données structurées et des requêtes plus complexes.
-- Exemple SQL CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); -
Room Persistence Library : Abstraction sur SQLite qui facilite le travail avec des bases de données.
// Exemple d'entité Room @Entity data class User( @PrimaryKey val id: Int, val name: String ) -
DataStore : Alternative moderne à Shared Preferences, permettant de stocker des données de manière asynchrone et sécurisée.
// Exemple de DataStore Prefs val EXAMPLE_COUNTER = intPreferencesKey("example_counter") // Dans le Fragment context?.dataStore?.edit { settings -> val currentCounter = settings[EXAMPLE_COUNTER] ?: 0 settings[EXAMPLE_COUNTER] = currentCounter + 1 } -
Stockage interne/externe : Pour stocker des fichiers.
// Écriture dans un fichier val filename = "my_data.txt" val fileContents = "Bonjour, le monde!" context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use { it.write(fileContents.toByteArray()) } -
Singleton : Instance globale d'une classe pour stocker des données, accessible depuis n'importe où dans l'application. À utiliser avec précaution en raison de problèmes potentiels avec les tests et les fuites de mémoire.
object DataManager { var sharedData: String = "" } -
Classe Application : Classe qui étend
Application, globale pour toute l'application et peut stocker des données.class MyApp : Application() { var globalData: String = "" }