Prečo nie je možné odovzdať parametre do konštruktora fragmentu?
sobes.tech AI
Odpoveď od AI
Parametre nie je možné priamo odovzdať do konštruktora fragmentu kvôli životnému cyklu Androidu a procese obnovenia stavu. Fragmenty môžu byť systémom znovu vytvorené (napríklad pri zmene konfigurácie alebo nedostatku pamäte), a v takom prípade bude volaný ich predvolený konštruktor bez argumentov. Ak odovzdáte parametre do konštruktora, stratia sa pri znovu vytvorení, čo môže viesť k pádu aplikácie alebo nesprávnemu správaniu.
Správny spôsob, ako odovzdať údaje do fragmentu, je použiť objekt Bundle a metódu setArguments(). Tento bundle je systémom uložený a obnovený pri znovu vytvorení fragmentu.
Príklad:
Odovzdanie údajov:
// Vytvorenie fragmentu s argumentmi
val fragment = MyFragment()
val bundle = Bundle()
bundle.putString("kľúč", "hodnota")
fragment.arguments = bundle
// Nahradenie fragmentu
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit()
Získanie údajov vo vnútri fragmentu:
// Vo vnútri fragmentu, napríklad v onCreate() alebo onViewCreated()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
val hodnota = it.getString("kľúč")
// Použiť "hodnota"
}
}
Toto zabezpečuje automatické uloženie a obnovenie odovzdaných údajov pri automatickom znovu vytvorení fragmentu systémom.