Hogyan lehet adatokat menteni a fragmenten kívül?
sobes.tech MI
Válasz az MI-től
Számos módszer létezik az adatok fragmenten kívüli tárolására:
-
ViewModel: Ideális az UI-hoz kapcsolódó adatok életciklus-érzékeny tárolására. Átéli a konfigurációs változásokat.class MyViewModel : ViewModel() { var data: String = "" } -
Activity: A fragmentek kommunikálhatnak a tartalmazó aktivitással (pl. interfészen keresztül vagy közvetlenül), ahol az aktivitás tárolhat adatokat.
// Az Activity-ben var sharedData: String = "" // A Fragmentben (activity as? MyActivity)?.sharedData = "Fragmentből mentve" -
Shared Preferences: Egyszerű módszer primitív adatok (kis mennyiségek) tárolására.
// Fragmentben val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return with(sharedPref.edit()) { putString("saved_string", "Az adataim") apply() // Vagy commit() szinkron íráshoz } -
SQLite Database: Strukturált adatok és összetettebb lekérdezések számára.
-- SQL példa CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); -
Room Persistence Library: Absztrakció az SQLite felett, megkönnyítve az adatbázisokkal való munkát.
// Room Entity példa @Entity data class User( @PrimaryKey val id: Int, val name: String ) -
DataStore: Modern alternatíva a Shared Preferences-hez, lehetővé teszi adatok aszinkron és biztonságos tárolását.
// DataStore Prefs példa val EXAMPLE_COUNTER = intPreferencesKey("example_counter") // Fragmentben context?.dataStore?.edit { settings -> val currentCounter = settings[EXAMPLE_COUNTER] ?: 0 settings[EXAMPLE_COUNTER] = currentCounter + 1 } -
Belső/Külső tárolás: Fájlok tárolására.
// Fájlba írás val filename = "my_data.txt" val fileContents = "Helló, világ!" context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use { it.write(fileContents.toByteArray()) } -
Singleton: Globális példány egy osztályból az adatok tárolására, mindenhol elérhető az alkalmazásban. Óvatosan használja, mert problémák adódhatnak a teszteléssel és a memóriaszivárgással.
object DataManager { var sharedData: String = "" } -
Alkalmazás osztály: Az
Application-t kiterjesztő osztály globális az egész alkalmazás számára, és tárolhat adatokat.class MyApp : Application() { var globalData: String = "" }