Sobes.tech
Middle

Proč nelze předávat parametry do konstruktoru fragmentu?

sobes.tech AI

Odpověď od AI

Parametry nelze přímo předávat do konstruktoru fragmentu kvůli životnímu cyklu Androidu a procesu obnovení stavu. Fragmenty mohou být systémem znovu vytvořeny (například při změně konfigurace nebo nedostatku paměti), a v takovém případě je volán jejich výchozí konstruktor bez argumentů. Pokud předáváte parametry do konstruktoru, ztratí se při znovuvytvoření, což může vést k pádu aplikace nebo nesprávnému chování.

Správný způsob, jak předat data do fragmentu, je použít objekt Bundle a metodu setArguments(). Tento bundle je systémem uložen a obnoven při znovuvytvoření fragmentu.

Příklad:

Předání dat:

// Vytvoření fragmentu s argumenty
val fragment = MyFragment()
val bundle = Bundle()
bundle.putString("klíč", "hodnota")
fragment.arguments = bundle

// Nahrazení fragmentu
supportFragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment)
    .commit()

Získání dat ve fragmentu:

// Uvnitř fragmentu, například v onCreate() nebo onViewCreated()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.let {
        val hodnota = it.getString("klíč")
        // Použít "hodnota"
    }
}

Toto zajišťuje automatické uložení a obnovení předaných dat při automatickém znovuvytvoření fragmentu systémem.