Sobes.tech
Junior

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