Sobes.tech
Junior — Middle

Кадом сабабҳо сабаб мешаванд, ки сохтани Fragment тавассути конструктор нодуруст аст?

sobes.tech AI

Ҷавоб аз AI

Тигезенг создории фрагмента мустақиман тавассути конструктор дар чанд сабаб нодуруст аст:

  • Набудани гузаронидани аргументҳо тавассути Bundle. Ҳангоми сохтани фрагмент, тавсия дода мешавад, ки усули статикӣ newInstance() истифода шавад, ки параметрҳоро дар Bundle ҷойгир мекунад ва онҳоро тавассути setArguments() муқаррар мекунад. Ин кафолат медиҳад, ки вақте системаи (масалан, дар вақти гардиши экран) онро дубора месозад, параметрҳо нигоҳ дошта мешаванд.

  • Масъалаҳо бо барқарор кардани ҳолат. Фрагментҳо метавонанд аз ҷониби системаи Android тавассути конструктори бе параметрҳо дубора сохта шаванд. Агар шумо конструктори ғайри стандартӣ бо параметрҳоро истифода баред, системаи он наметавонад фрагментро дуруст барқарор кунад.

  • Насозии давраи ҳаёт. Android интизор аст, ки фрагментҳо конструктори умумӣ ва публӣ бо параметрҳоро дошта бошанд. Истифодаи конструкторҳои дигар метавонад ба хатогиҳо дар барқарор кардани ҳолат оварда расонад.

Масалан, сохтани дурустии фрагмент:

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
    }
}

Ин гуна, сохтани фрагмент тавассути конструктор, тавсияҳоро вайрон мекунад ва метавонад дар кори барнома хатогӣ ба вуҷуд орад.