Sobes.tech
Junior

Cum se transmit datele dintr-o activitate în alta în Android?

sobes.tech AI

Răspuns de la AI

Datele pot fi transmise folosind Intent:

  1. În Activity-ul sursă: Puneți datele în Extras-urile Intent folosind metode precum putExtra(String key, value).

    // Pregătirea Intent-ului
    val intent = Intent(this, TargetActivity::class.java)
    // Adăugarea datelor
    intent.putExtra("myString", "Salut din prima Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // Puteți transmite obiecte care implementează Parcelable sau Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Pornirea noii Activity
    startActivity(intent)
    
  2. În Activity-ul țintă: Extrageți datele din Extras-urile Intent primite în metoda onCreate sau onNewIntent.

    // În onCreate() al Activity-ului țintă
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Obțineți Intent-ul care a lansat această Activity
        val intent = intent
    
        // Extrageți datele după cheie
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Al doilea argument este valoarea implicită
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Procesați datele extrase
        println("Șir primit: $myString")
        println("Număr primit: $myInt")
        println("Boolean primit: $myBool")
    
        // Pentru obiecte Parcelable sau Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Alte metode de transmitere a datelor, potrivite pentru scenarii mai complexe sau volume mari de date:

  • ViewModel partajat între Fragments/Activities (prin SharedViewModel): Convenabil pentru date comune între componentele legate.
  • Bundle (în interiorul Extras-urilor Intent): putExtra folosește de fapt un Bundle intern.
  • Variabile statice/singleton: Trebuie folosite cu precauție, pot duce la scurgeri de memorie și probleme de stare.
  • Bază de date/SharedPreferences: Pentru stocare permanentă sau transmitere de date care necesită păstrare.
  • Event Bus (de exemplu, EventBus, RxJava): Pentru transmiterea evenimentelor sau datelor între componente în mod asincron.
  • File I/O: Salvare în fișier și citire din acesta.