Kaip galima išsaugoti duomenis už fragmento ribų?
sobes.tech AI
Atsakymas iš AI
Yra keletas būdų išsaugoti duomenis už fragmento ribų:
-
ViewModel: Idealiai tinka UI susijintiems duomenims saugoti, naudojant gyvenimo ciklo sąmoningą būdą. Išgyvena konfigūracijos pakeitimus.class MyViewModel : ViewModel() { var data: String = "" } -
Activity: Fragmentai gali sąveikauti su konteinerine veikla (pavyzdžiui, per sąsają arba tiesiogiai), kur veikla gali saugoti duomenis.
// Activity var sharedData: String = "" // Fragment (activity as? MyActivity)?.sharedData = "Išsaugota iš fragmento" -
Shared Preferences: Paprastas būdas saugoti primityvius duomenis (maži kiekiai).
// Fragment val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return with(sharedPref.edit()) { putString("saved_string", "Mano duomenys") apply() // arba commit() sinchroniniam įrašymui } -
SQLite duomenų bazė: Struktūruotiems duomenims ir sudėtingesniems užklausoms.
-- Pavyzdys SQL CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); -
Room Persistence Library: Abstrakcija virš SQLite, palengvinanti darbą su duomenų bazėmis.
// Room Entity pavyzdys @Entity data class User( @PrimaryKey val id: Int, val name: String ) -
DataStore: Modernesnė alternatyva Shared Preferences, leidžianti saugoti duomenis asinchroniškai ir saugiai.
// DataStore Prefs pavyzdys val EXAMPLE_COUNTER = intPreferencesKey("example_counter") // Fragment context?.dataStore?.edit { settings -> val currentCounter = settings[EXAMPLE_COUNTER] ?: 0 settings[EXAMPLE_COUNTER] = currentCounter + 1 } -
Vidinis / išorinis saugojimas: Failų saugojimas.
// Rašymas į failą val filename = "my_data.txt" val fileContents = "Sveiki, pasauli!" context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use { it.write(fileContents.toByteArray()) } -
Singleton: Bendras klasės egzempliorius duomenų saugojimui, prieinamas iš bet kurios programos vietos. Reikia naudoti atsargiai dėl galimų testavimo ir atminties nutekėjimo problemų.
object DataManager { var sharedData: String = "" } -
Programos klasė: Klasė, išplečianti
Application, yra globali visai programai ir gali saugoti duomenis.class MyApp : Application() { var globalData: String = "" }