Sobes.tech
Middle

Come organizzare l'interazione tra un'Activity e un fragmento?

sobes.tech AI

Risposta dell'AI

L'interazione tra Activity e frammento in Android può essere organizzata in diversi modi:

  1. Attraverso le interfacce. Il frammento dichiara un'interfaccia con metodi di callback, implementata dall'Activity. Il frammento chiama questi metodi per trasmettere dati o eventi all'Activity.
class MyFragment : Fragment() {
    interface OnDataPass {
        fun onDataPass(data: String)
    }

    private lateinit var dataPasser: OnDataPass

    override fun onAttach(context: Context) {
        super.onAttach(context)
        dataPasser = context as OnDataPass
    }

    fun passData(data: String) {
        dataPasser.onDataPass(data)
    }
}

class MyActivity : AppCompatActivity(), MyFragment.OnDataPass {
    override fun onDataPass(data: String) {
        // Gestione dei dati dal frammento
    }
}
  1. Utilizzo di ViewModel con il ciclo di vita dell'Activity. Un ViewModel condiviso permette all'Activity e al frammento di scambiare dati tramite LiveData.
class SharedViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// In Activity e frammento
val model = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

// Il frammento aggiorna i dati
model.data.value = "Nuovo valore"

// L'Activity osserva le modifiche
model.data.observe(this) { value ->
    // Gestione del valore
}
  1. Utilizzo di EventBus (ad esempio, Otto, EventBus) — pattern di pubblicazione-sottoscrizione per lo scambio di eventi.

  2. Trasmissione di argomenti tramite Bundle durante la creazione del frammento — per passare dati dall'Activity al frammento.

La scelta del metodo dipende dal compito e dall'architettura dell'applicazione.