Middle
Elenca tutti i modi di trasferimento dei dati tra i frammenti.
sobes.tech AI
Risposta dell'AI
-
Argomenti del Bundle: Il metodo più comune. I dati vengono trasmessi come Bundle tramite il metodo
setArguments()del fragment.// Nel fragment mittente val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... transizione a TargetFragment // Nel fragment destinatario override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... utilizza value } -
ViewModel Condiviso: Usato per trasmettere dati legati al ciclo di vita dell'attività o di più fragment.
// Nel ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // In entrambi i fragment private val sharedViewModel: SharedViewModel by activityViewModels() // Nel fragment mittente sharedViewModel.data.value = "dati da trasmettere" // Nel fragment destinatario sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... utilizza data } -
Interfacce di Callback: Il fragment può definire un'interfaccia che l'attività implementa. Il fragment chiama i metodi di questa interfaccia, passando dati all'attività, che può poi passarli ad un altro fragment.
// Interfaccia nel fragment mittente interface OnDataPass { fun onDataPass(data: String) } // Fragment mittente private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context deve implementare OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Attività class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Si presume che TargetFragment abbia il metodo updateData } } // Fragment destinatario fun updateData(data: String) { // ... aggiorna UI o salva data } -
API di Risultato del Fragment: Metodo moderno per trasmettere risultati tra fragment, introdotto in AndroidX Fragment versione 1.3.0.
// Nel fragment mittente setFragmentResult("requestKey", bundleOf("bundleKey" to "risultato")) // Nel fragment destinatario setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... utilizza result }