Sobes.tech
Junior

Πώς μεταφέρουμε δεδομένα από ένα τμήμα σε ένα άλλο;

sobes.tech AI

Απάντηση από AI

  1. 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")
        // ... χρήση της τιμής
    }
    
  2. Κοινό 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 ->
        // ... χρήση της τιμής
    }
    
  3. Χρήση διασύνδεσης 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 με τα δεδομένα
    }
    
  4. API αποτελεσμάτων τμήματος: Σύγχρονος και συστηνόμενος τρόπος ανταλλαγής δεδομένων μεταξύ τμημάτων.

    // Στο τμήμα που στέλνει (ορίζει το αποτέλεσμα)
    setFragmentResult("requestKey", bundleOf("bundleKey" to "value"))
    
    // Στο τμήμα που λαμβάνει (ακούει το αποτέλεσμα)
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... χρήση του αποτελέσματος
    }