Junior
Πώς μεταφέρουμε δεδομένα από ένα τμήμα σε ένα άλλο;
sobes.tech AI
Απάντηση από AI
-
Bundle Argumentlar: Χρησιμοποιείται για τη μεταφορά πρωταρχικών τύπων δεδομένων και αντικειμένων που υλοποιούν το
ParcelableήSerializableκατά τη δημιουργία μιας νέας στιγμιότυπου του τμήματος.// Στο τμήμα που στέλνει val bundle = Bundle().apply { putString("key", "value") } val fragment = TargetFragment().apply { arguments = bundle } // Στο τμήμα που λαμβάνει override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... χρήση της τιμής } -
Κοινό ViewModel: Τα τμήματα που ανήκουν σε μια ίδια δραστηριότητα μπορούν να χρησιμοποιήσουν ένα κοινό
ViewModelγια ανταλλαγή δεδομένων.// SharedViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Στο τμήμα που στέλνει private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.value = "value" // Στο τμήμα που λαμβάνει private val sharedViewModel: SharedViewModel by activityViewModels() sharedViewModel.data.observe(viewLifecycleOwner) { value -> // ... χρήση της τιμής } -
Χρήση διασύνδεσης callback: Ένα τμήμα καλεί μια μέθοδο στην δραστηριότητα, και η δραστηριότητα στη συνέχεια καλεί μια μέθοδο σε άλλο τμήμα.
// Διασύνδεση στη δραστηριότητα ή σε ξεχωριστό αρχείο interface DataTransferListener { fun onDataReceived(data: String) } // Στο τμήμα που στέλνει (activity as? DataTransferListener)?.onDataReceived("value") // Στη δραστηριότητα που υλοποιεί τη διασύνδεση override fun onDataReceived(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment_container) as? TargetFragment targetFragment?.updateUI(data) } // Στο τμήμα που λαμβάνει fun updateUI(data: String) { // ... ενημέρωση UI με τα δεδομένα } -
API αποτελεσμάτων τμήματος: Σύγχρονος και συστηνόμενος τρόπος ανταλλαγής δεδομένων μεταξύ τμημάτων.
// Στο τμήμα που στέλνει (ορίζει το αποτέλεσμα) setFragmentResult("requestKey", bundleOf("bundleKey" to "value")) // Στο τμήμα που λαμβάνει (ακούει το αποτέλεσμα) setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... χρήση του αποτελέσματος }