Sobes.tech
Junior

Cum se pot salva datele în afara fragmentului?

sobes.tech AI

Răspuns de la AI

Există mai multe modalități de a salva date în afara unui fragment:

  • ViewModel: Ideal pentru stocarea datelor legate de UI într-un mod conștient de ciclul de viață. Supraviețuiește schimbărilor de configurație.

    class MyViewModel : ViewModel() {
        var data: String = ""
    }
    
  • Activity: Fragmentele pot interacționa cu activitatea container (de exemplu, printr-o interfață sau direct), unde activitatea poate stoca date.

    // În Activity
    var sharedData: String = ""
    
    // În Fragment
    (activity as? MyActivity)?.sharedData = "Salvat din fragment"
    
  • Shared Preferences: Mod simplu de a stoca date primitive (cantități mici).

    // În Fragment
    val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return
    with(sharedPref.edit()) {
        putString("saved_string", "Datele mele")
        apply() // Sau commit() pentru scriere sincronă
    }
    
  • SQLite Database: Pentru date structurate și interogări mai complexe.

    -- Exemplu SQL
    CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
    
  • Room Persistence Library: Abstracție peste SQLite, care simplifică lucrul cu bazele de date.

    // Exemplu de entitate Room
    @Entity
    data class User(
        @PrimaryKey val id: Int,
        val name: String
    )
    
  • DataStore: Alternativă modernă la Shared Preferences, care permite stocarea datelor asincron și în siguranță.

    // Exemplu DataStore Prefs
    val EXAMPLE_COUNTER = intPreferencesKey("example_counter")
    
    // În Fragment
    context?.dataStore?.edit { settings ->
        val currentCounter = settings[EXAMPLE_COUNTER] ?: 0
        settings[EXAMPLE_COUNTER] = currentCounter + 1
    }
    
  • Stocare internă/externă: Pentru stocarea fișierelor.

    // Scriere în fișier
    val filename = "my_data.txt"
    val fileContents = "Salut, lume!"
    context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use {
        it.write(fileContents.toByteArray())
    }
    
  • Singleton: Instanță globală a unei clase pentru stocarea datelor, accesibilă din orice loc al aplicației. Folosiți cu prudență din cauza potențialelor probleme cu testarea și scurgerile de memorie.

    object DataManager {
        var sharedData: String = ""
    }
    
  • Clasa Application: Clasă care extinde Application, este globală pentru întreaga aplicație și poate stoca date.

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