Middle
Sarakstiet visus datu pārraides veidus starp fragmentiem.
sobes.tech AI
Atbilde no AI
-
Kopa argumenti: Visbiežāk sastopamais veids. Dati tiek nodoti kā Bundle, izmantojot
setArguments()metodi fragmentā.// Sūtīšanas fragmentā val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... pāreja uz TargetFragment // Saņemšanas fragmentā override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... izmantojam vērtību } -
Shared ViewModel: Izmanto datu nodošanai, kas saistīti ar aktivitātes vai vairāku fragmentu dzīves ciklu.
// ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Abos fragmentos private val sharedViewModel: SharedViewModel by activityViewModels() // Sūtīšanas fragmentā sharedViewModel.data.value = "nododamie dati" // Saņemšanas fragmentā sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... izmantojam datus } -
Atgriezeniskās saziņas interfeisi: Fragments var definēt interfeisu, ko realizē aktivitāte. Fragments izsauc šī interfeisa metodes, nododot datus aktivitātei, kura tos var pārsūtīt citam fragmentam.
// Interfeiss sūtīšanas fragmentā interface OnDataPass { fun onDataPass(data: String) } // Sūtīšanas fragments private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context jāīsteno OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Aktivitāte class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Pieņemts, ka ir updateData metode TargetFragment } } // Saņemšanas fragments fun updateData(data: String) { // ... atjaunojam UI vai saglabājam datus } -
Fragment Result API: Mūsdienu veids, kā nodot rezultātus starp fragmentiem, ieviests AndroidX Fragment versijā 1.3.0.
// Sūtīšanas fragmentā setFragmentResult("requestKey", bundleOf("bundleKey" to "rezultāts")) // Saņemšanas fragmentā setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... izmantojam rezultātu }