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.