Sobes.tech
Junior — Middle

Quais razões tornam incorreta a criação de um Fragment através da chamada ao seu construtor?

sobes.tech IA

Resposta da IA

Criar um Fragment diretamente através do construtor está incorreto por várias razões:

  • Falta de passagem de argumentos através do Bundle. Ao criar um fragmento, recomenda-se usar o método estático newInstance(), que coloca os parâmetros num Bundle e os define através de setArguments(). Isto garante que, ao ser recriado pelo sistema (por exemplo, ao rodar a tela), os parâmetros sejam preservados.

  • Problemas com a restauração do estado. Os fragmentos podem ser recriados pelo sistema Android através de um construtor sem parâmetros. Se usar um construtor não padrão com parâmetros, o sistema não conseguirá restaurar corretamente o fragmento.

  • Violação do ciclo de vida. O Android espera que os fragmentos tenham um construtor público sem parâmetros. Usar outros construtores pode causar erros na restauração do estado.

Exemplo de criação correta de um fragmento:

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")
        // Usar param
    }
}

Assim, criar um fragmento através do construtor viola as recomendações e pode levar a erros ao trabalhar com a aplicação.