Middle
Loetlege kõik andmeedastuse viisid fragmentide vahel.
sobes.tech AI
Vastus AI-lt
-
Kottide argumentide komplekt: Kõige levinum viis. Andmed edastatakse Bundle'i kaudu
setArguments()meetodi abil fragmentis.// Saadetava fragmenti sees val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... üleminek TargetFragmentile // Vastuvõtva fragmenti sees override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... kasutame väärtust } -
Shared ViewModel: Kasutatakse andmete edastamiseks, mis on seotud aktiivsuse või mitme fragmaendi elutsükliga.
// ViewModel'is class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Mõlemas fragmentis private val sharedViewModel: SharedViewModel by activityViewModels() // Saadetava fragmenti sees sharedViewModel.data.value = "edastatavad andmed" // Vastuvõtva fragmenti sees sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... kasutame andmeid } -
Tagasikutsumise liidesed: Fragment võib määratleda liidese, mida aktiivsus rakendab. Fragment kutsub selle liidese meetodeid, edastades andmeid aktiivsusele, mis seejärel võib neid edasi anda teisele fragmentile.
// Saadetava fragmenti liides interface OnDataPass { fun onDataPass(data: String) } // Saadetav fragment private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context peab rakendama OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Aktiivsus class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Eeldatakse, et on meetod updateData TargetFragmentis } } // Vastuvõttev fragment fun updateData(data: String) { // ... uuendame UI-d või salvestame andmeid } -
Fragment Result API: Kaasaegne viis tulemuste edastamiseks fragmentide vahel, tutvustatud AndroidX Fragment versioonis 1.3.0.
// Saadetava fragmenti sees setFragmentResult("requestKey", bundleOf("bundleKey" to "tulemus")) // Vastuvõtva fragmenti sees setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... kasutame tulemust }