Sobes.tech
Junior — Middle

Akými metódami sa zabezpečuje interakcia medzi Fragmentmi nachádzajúcimi sa v jednej Activity?

sobes.tech AI

Odpoveď od AI

Interakcia medzi fragmentami v tej istej aktivite sa zvyčajne realizuje prostredníctvom aktivity, ktorá slúži ako sprostredkovateľ. Hlavné metódy:

  1. Pomocou callback rozhrania (Callback Interface)

    • Fragment deklaruje rozhranie s metódami na prenos dát.
    • Aktivita implementuje toto rozhranie a prijíma dáta od jedného fragmentu.
    • Aktivita prenáša dáta inému fragmentu.
  2. Použitie ViewModel s životným cyklom aktivity (Shared ViewModel)

    • Vytvorí sa ViewModel spojený s aktivitou.
    • Oba fragmenty majú prístup k rovnakému ViewModelu.
    • Prostredníctvom LiveData alebo iných pozorovateľných objektov si fragmenty vymieňajú dáta.
  3. Použitie FragmentManager na vyhľadanie fragmentov a priame volanie ich metód

    • Menej preferovaný spôsob, pretože zvyšuje prepojenie.

Príklad s rozhraním:

// V Fragment A
interface OnDataPass {
    fun onDataPass(data: String)
}

class FragmentA : Fragment() {
    lateinit var dataPasser: OnDataPass

    override fun onAttach(context: Context) {
        super.onAttach(context)
        dataPasser = context as OnDataPass
    }

    fun passData() {
        dataPasser.onDataPass("Ahoj od FragmentA")
    }
}

// V Activity
class MainActivity : AppCompatActivity(), FragmentA.OnDataPass {
    override fun onDataPass(data: String) {
        val fragmentB = supportFragmentManager.findFragmentById(R.id.fragmentB) as FragmentB
        fragmentB.updateData(data)
    }
}