Sobes.tech
Middle

Sorolja fel az összes adatátviteli módot a fragmentumok között.

sobes.tech MI

Válasz az MI-től

  1. Csomag argumentumok: A leggyakoribb módszer. Az adatok Bundle-ben kerülnek átadásra a setArguments() módszerrel a fragmentben.

    // A küldő fragmentben
    val bundle = Bundle()
    bundle.putString("key", "value")
    val targetFragment = TargetFragment()
    targetFragment.arguments = bundle
    // ... átmenet a TargetFragmenthez
    
    // A fogadó fragmentben
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val value = arguments?.getString("key")
        // ... használjuk az értéket
    }
    
  2. Shared ViewModel: Az aktivitás vagy több fragment életciklusához kapcsolódó adatok átadására szolgál.

    // A ViewModel-ben
    class SharedViewModel : ViewModel() {
        val data = MutableLiveData<String>()
    }
    
    // Mindkét fragmentben
    private val sharedViewModel: SharedViewModel by activityViewModels()
    
    // A küldő fragmentben
    sharedViewModel.data.value = "átadott adatok"
    
    // A fogadó fragmentben
    sharedViewModel.data.observe(viewLifecycleOwner) { data ->
        // ... használjuk az adatot
    }
    
  3. Callback interfészek: A fragment meghatározhat egy interfészt, amelyet az aktivitás implementál. A fragment meghívja ennek az interfésznek a módszereit, átadva az adatokat az aktivitásnak, amely később átadhatja azokat egy másik fragmentnek.

    // Az interfész a küldő fragmentben
    interface OnDataPass {
        fun onDataPass(data: String)
    }
    
    // A küldő fragment
    private var dataPasser: OnDataPass? = null
    
    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is OnDataPass) {
            dataPasser = context
        } else {
            throw RuntimeException("$context-nek implementálnia kell az OnDataPass-t")
        }
    }
    
    fun passData(data: String) {
        dataPasser?.onDataPass(data)
    }
    
    // Az aktivitás
    class MainActivity : AppCompatActivity(), OnDataPass {
        override fun onDataPass(data: String) {
            val targetFragment = supportFragmentManager.findFragmentById(R.id.target_fragment) as? TargetFragment
            targetFragment?.updateData(data) // Feltételezett updateData metódus a TargetFragmentben
        }
    }
    
    // A fogadó fragment
    fun updateData(data: String) {
        // ... frissítjük a UI-t vagy tároljuk az adatot
    }
    
  4. Fragment Eredmény API: A modern módszer eredmények átadására a fragmentek között, az AndroidX Fragment 1.3.0 verziójától.

    // A küldő fragmentben
    setFragmentResult("requestKey", bundleOf("bundleKey" to "eredmény"))
    
    // A fogadó fragmentben
    setFragmentResultListener("requestKey") { requestKey, bundle ->
        val result = bundle.getString("bundleKey")
        // ... használjuk az eredményt
    }