Sobes.tech
Junior

Come trasferire i dati da una attività all'altra in Android?

sobes.tech AI

Risposta dell'AI

I dati possono essere trasmessi utilizzando Intent:

  1. Nell'Activity di origine: Inserisci i dati negli Extras dell'Intent usando metodi come putExtra(String key, value).

    // Preparare l'Intent
    val intent = Intent(this, TargetActivity::class.java)
    // Aggiungere dati
    intent.putExtra("myString", "Ciao dalla prima Activity")
    intent.putExtra("myInt", 123)
    intent.putExtra("myBool", true)
    // È possibile passare oggetti che implementano Parcelable o Serializable
    // intent.putExtra("myObject", myParcelableObject)
    
    // Avviare la nuova Activity
    startActivity(intent)
    
  2. Nell'Activity di destinazione: Estrai i dati dagli Extras dell'Intent ricevuto in onCreate o onNewIntent.

    // In onCreate() dell'Activity di destinazione
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_target)
    
        // Ottenere l'Intent che ha avviato questa Activity
        val intent = intent
    
        // Estrazione dei dati tramite chiave
        val myString = intent.getStringExtra("myString")
        val myInt = intent.getIntExtra("myInt", 0) // Secondo argomento: valore di default
        val myBool = intent.getBooleanExtra("myBool", false)
    
        // Elaborare i dati estratti
        println("Stringa ricevuta: $myString")
        println("Numero ricevuto: $myInt")
        println("Booleano ricevuto: $myBool")
    
        // Per oggetti Parcelable o Serializable
        // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject")
    }
    

Altri metodi di trasmissione dati, adatti a scenari più complessi o grandi volumi di dati:

  • ViewModel condiviso tra Fragment/Activities (tramite SharedViewModel): Utile per dati condivisi tra componenti collegati.
  • Bundle (all'interno degli Extras dell'Intent): putExtra utilizza internamente un Bundle.
  • Variabili statiche/singleton: Da usare con cautela, possono causare perdite di memoria e problemi di stato.
  • Database/SharedPreferences: Per memorizzazione persistente o trasmissione di dati che devono essere conservati.
  • Event Bus (ad esempio, EventBus, RxJava): Per trasmettere eventi o dati tra componenti in modo asincrono.
  • File I/O: Salvataggio su file e lettura da esso.