Middle
Καταγράψτε όλους τους τρόπους μεταφοράς δεδομένων μεταξύ των τμημάτων.
sobes.tech AI
Απάντηση από AI
-
Ορισμοί Bundle: Ο πιο συνηθισμένος τρόπος. Τα δεδομένα μεταβιβάζονται ως Bundle μέσω της μεθόδου
setArguments()του τμήματος.// Στο αποστολέα τμήμα val bundle = Bundle() bundle.putString("key", "value") val targetFragment = TargetFragment() targetFragment.arguments = bundle // ... μετάβαση στο TargetFragment // Στο λήπτη τμήμα override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val value = arguments?.getString("key") // ... χρήση της τιμής } -
Κοινόχρηστο ViewModel: Χρησιμοποιείται για τη μεταφορά δεδομένων που σχετίζονται με τον κύκλο ζωής της δραστηριότητας ή πολλών τμημάτων.
// Στο ViewModel class SharedViewModel : ViewModel() { val data = MutableLiveData<String>() } // Στα δύο τμήματα private val sharedViewModel: SharedViewModel by activityViewModels() // Στο αποστολέα τμήμα sharedViewModel.data.value = "δεδομένα προς μεταφορά" // Στο λήπτη τμήμα sharedViewModel.data.observe(viewLifecycleOwner) { data -> // ... χρήση δεδομένων } -
Διεπαφές Callback: Το τμήμα μπορεί να ορίσει μια διεπαφή που υλοποιείται από τη δραστηριότητα. Το τμήμα καλεί τις μεθόδους αυτής της διεπαφής, περνώντας δεδομένα στη δραστηριότητα, η οποία μπορεί στη συνέχεια να τα μεταφέρει σε άλλο τμήμα.
// Διεπαφή στο αποστολέα τμήμα interface OnDataPass { fun onDataPass(data: String) } // Αποστολέας τμήμα private var dataPasser: OnDataPass? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is OnDataPass) { dataPasser = context } else { throw RuntimeException("$context πρέπει να υλοποιεί OnDataPass") } } fun passData(data: String) { dataPasser?.onDataPass(data) } // Δραστηριότητα class MainActivity : AppCompatActivity(), OnDataPass { override fun onDataPass(data: String) { val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment targetFragment?.updateData(data) // Υποθέτουμε ότι το TargetFragment έχει τη μέθοδο updateData } } // Λήπτης τμήμα fun updateData(data: String) { // ... ενημέρωση UI ή αποθήκευση δεδομένων } -
API Αποτελεσμάτων Τμήματος: Σύγχρονος τρόπος μεταφοράς αποτελεσμάτων μεταξύ τμημάτων, εισήχθη στην έκδοση 1.3.0 του AndroidX Fragment.
// Στο αποστολέα τμήμα setFragmentResult("requestKey", bundleOf("bundleKey" to "αποτέλεσμα")) // Στο λήπτη τμήμα setFragmentResultListener("requestKey") { requestKey, bundle -> val result = bundle.getString("bundleKey") // ... χρήση αποτελέσματος }