Sobes.tech
Junior — Middle

Milyen okok miatt helytelen egy Fragment létrehozása a konstruktorának hívásával?

sobes.tech MI

Válasz az MI-től

Egy Fragment közvetlenül a konstruktoron keresztül történő létrehozása több okból is helytelen:

  • Argumentumok átadása Bundle segítségével hiányzik. Fragment létrehozásakor ajánlott a newInstance() statikus metódus használata, amely az argumentumokat egy Bundle-be helyezi és setArguments()-szel állítja be. Ez biztosítja, hogy a rendszer által történő újraalkotás (például képernyőforgatás esetén) során az argumentumok megmaradjanak.

  • Állapot visszaállítási problémák. A fragmentek a Android rendszer által paraméter nélküli konstruktorral újraalkothatók. Ha nem szabványos, paraméteres konstruktort használ, a rendszer nem tudja helyesen visszaállítani a fragmentet.

  • Életciklus megsértése. A Android elvárja, hogy a fragmenteknek nyilvános, paraméter nélküli konstruktoruk legyen. Más konstruktorok használata hibákhoz vezethet az állapot visszaállításakor.

Helyes fragment létrehozási példa:

class MyFragment : Fragment() {
    companion object {
        fun newInstance(param: String): MyFragment {
            val fragment = MyFragment()
            val args = Bundle()
            args.putString("param_key", param)
            fragment.arguments = args
            return fragment
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val param = arguments?.getString("param_key")
        // param használata
    }
}

Az így történő fragment létrehozás a konstruktoron keresztül sérti a ajánlásokat, és hibákhoz vezethet az alkalmazás működése során.