Sobes.tech
Junior

Kā var saglabāt datus ārpus fragmenta?

sobes.tech AI

Atbilde no AI

Ir ir vairākas veidi, kā saglabāt datus ārpus fragmenta:

  • ViewModel: Ideāli piemērots UI saistītu datu glabāšanai, izmantojot dzīves cikla apzinātu pieeju. Pārdzīvo konfigurācijas izmaiņas.

    class MyViewModel : ViewModel() {
        var data: String = ""
    }
    
  • Activity: Fragmenti var sadarboties ar konteineraktivitāti (piemēram, caur saskarni vai tieši), kur aktivitāte var glabāt datus.

    // Aktivitātē
    var sharedData: String = ""
    
    // Fragmentā
    (activity as? MyActivity)?.sharedData = "Saglabāts no fragmenta"
    
  • Shared Preferences: Vienkāršs veids, kā glabāt primīvus datus (mazus apjomus).

    // Fragmentā
    val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return
    with(sharedPref.edit()) {
        putString("saved_string", "Mani dati")
        apply() // vai commit() sinhronai ierakstīšanai
    }
    
  • SQLite datu bāze: Strukturētiem datiem un sarežģītākām vaicājumiem.

    -- SQL piemērs
    CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
    
  • Room Persistence Library: Abstrakcija pār SQLite, kas atvieglo darbu ar datu bāzēm.

    // Room Entity piemērs
    @Entity
    data class User(
        @PrimaryKey val id: Int,
        val name: String
    )
    
  • DataStore: Modernāka alternatīva Shared Preferences, ļaujot glabāt datus asinhroni un droši.

    // DataStore Prefs piemērs
    val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
    
    // Fragmentā
    context?.dataStore?.edit { settings ->
        val currentCounter = settings[EXAMPLE_COUNTER] ?: 0
        settings[EXAMPLE_COUNTER] = currentCounter + 1
    }
    
  • Iekšējā / ārējā glabāšana: Failu glabāšana.

    // Ieraksts failā
    val filename = "my_data.txt"
    val fileContents = "Sveiki, pasaule!"
    context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use {
        it.write(fileContents.toByteArray())
    }
    
  • Singleton: Globāls klases instances datu glabāšanai, pieejams no jebkuras lietojumprogrammas vietas. Jālieto uzmanīgi, jo var radīt testēšanas un atmiņas noplūdes problēmas.

    object DataManager {
        var sharedData: String = ""
    }
    
  • Lietojumprogrammas klase: Klase, kas paplašina Application, ir globāla visai lietojumprogrammai un var glabāt datus.

    class MyApp : Application() {
        var globalData: String = ""
    }