Sobes.tech
Junior — Middle

Kokios priežastys daro neteisingą Fragment kūrimą naudojant jo konstruktorių?

sobes.tech AI

Atsakymas iš AI

Kreipiantis į Fragment'ą tiesiogiai per konstruktorių, yra keletas priežasčių, kodėl tai yra neteisinga:

  • Trūksta argumentų perdavimo per Bundle. Kuriant fragmentą, rekomenduojama naudoti statinį metodą newInstance(), kuris įdeda parametrus į Bundle ir nustato juos naudojant setArguments(). Tai užtikrina, kad sistema (pavyzdžiui, ekrano pasukimo metu) iš naujo sukuriant fragmentą, parametrai išliks.

  • Būsenos atkūrimo problemos. Fragmentai gali būti atkuriami Android sistemos naudojant konstruktorių be parametrų. Jei naudojate nestandartinį konstruktorių su parametrais, sistema negalės tinkamai atkurti fragmento.

  • Gyvenimo ciklo pažeidimas. Android tikisi, kad fragmentai turės viešą konstruktorių be parametrų. Kitų konstruktorių naudojimas gali sukelti klaidų būsenos atkūrimo metu.

Tinkamas fragmento kūrimo pavyzdys:

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")
        // Parametro naudojimas
    }
}

Taip, fragmento kūrimas per konstruktorių pažeidžia rekomendacijas ir gali sukelti klaidų programos veikimo metu.