Middle
Išvardinkite visus duomenų perdavimo būdus tarp fragmentų.
sobes.tech AI
Atsakymas iš AI
-
Rinkinys argumentai: Dažniausias būdas. Duomenys perduodami kaip Bundle per
setArguments()metodą fragmento.// Siunčiančio fragmento viduje val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... pereiti prie TargetFragment // Gavusio fragmento viduje override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... naudojame reikšmę } -
Shared ViewModel: Naudojamas duomenų perdavimui, susijusiam su aktyvumo ar kelių fragmentų gyvavimo ciklu.
// ViewModel'e class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Abiejuose fragmentuose private val sharedViewModel: SharedViewModel by activityViewModels() // Siunčiančio fragmento viduje sharedViewModel.data.value = "perduodami duomenys" // Gavusio fragmento viduje sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... naudojame duomenis } -
Atgalinio ryšio sąsajos: Fragmentas gali apibrėžti sąsają, kurią įgyvendina aktyvumas. Fragmentas kviečia šios sąsajos metodus, perduodamas duomenis aktyvumui, kuris tada gali juos perduoti kitam fragmentui.
// Sąsaja siuntimo fragmente interface OnDataPass { fun onDataPass(data: String) } // Siuntimo fragmentas private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context turi įgyvendinti OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Veikla class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Tikimasi, kad yra updateData metodas TargetFragment'e } } // Priimantis fragmentas fun updateData(data: String) { // ... atnaujinti UI arba išsaugoti duomenis } -
Fragment Result API: Šiuolaikinis būdas perduoti rezultatus tarp fragmentų, pristatytas AndroidX Fragment versijoje 1.3.0.
// Siunčiančiame fragmente setFragmentResult("requestKey", bundleOf("bundleKey" to "rezultatas")) // Priimančiame fragmente setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... naudoti rezultatą }