Sobes.tech
Junior

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 = ""
    }