Sobes.tech
Junior

Kaip perduoti duomenis iš vienos veiklos į kitą Android?

sobes.tech AI

Atsakymas iš AI

Duomenis galima perduoti naudojant Intent:

  1. Pradiniame Activity: Įdėkite duomenis į Extras Intent naudojant metodus kaip putExtra(String key, value):

    // Intent paruošimas
    val intent = Intent(this, TargetActivity::class.java)
    // Duomenų pridėjimas
    intent.putExtra("myString", "Sveiki iš pirmojo Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Galima perduoti objektus, kurie įgyvendina Parcelable arba Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Naujo Activity paleidimas
    startActivity(intent)
    
  2. Tikslo Activity: Ištraukite duomenis iš Extras Intent, gauto onCreate arba onNewIntent metode:

    // `onCreate()` tikslo Activity
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Gaukite Intent, kuris paleido šį Activity
        val intent = intent
    
        // Ištraukite duomenis pagal raktą
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Antras argumentas - numatytoji reikšmė
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Apdorokite išgautus duomenis
        println("Gauta eilutė: $myString")
        println("Gauta skaičius: $myInt")
        println("Gauta boolean: $myBool")
    
        // Parcelable ar Serializable objektams
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Kitos duomenų perdavimo metodai, tinkami sudėtingesniems scenarijams arba dideliam duomenų kiekiui:

  • ViewModel bendrinimas tarp Fragmentų/Activity (per SharedViewModel): Patogu bendriems duomenims tarp susijusių komponentų.
  • Bundle (Extras Intent viduje): putExtra iš tikrųjų naudoja Bundle viduje.
  • Statinės kintamosios/singletonai: Reikia naudoti atsargiai, gali sukelti atminties nutekėjimą ir būsenos problemas.
  • Duomenų bazė/SharedPreferences: Nuolatinis saugojimas arba duomenų perdavimas, reikalaujantis išsaugojimo.
  • Event Bus (pvz., EventBus, RxJava): Renginių arba duomenų perdavimas asinchroniškai.
  • Failų įvestis/išvestis: Saugojimas faile ir skaitymas iš jo.