Sobes.tech
Middle

Por que não se podem passar parâmetros para o construtor do fragmento?

sobes.tech IA

Resposta da IA

Não é possível passar parâmetros diretamente para o construtor do fragmento devido ao ciclo de vida do Android e ao processo de restauração do estado. Os fragmentos podem ser recriados pelo sistema (por exemplo, ao alterar a configuração ou por falta de memória), e nesse caso, o seu construtor padrão será chamado sem argumentos. Se passar parâmetros para o construtor, eles serão perdidos na recriação, o que pode levar à falha da aplicação ou a comportamentos incorretos.

A forma correta de passar dados para um fragmento é usar um objeto Bundle e o método setArguments(). Este bundle é salvo e restaurado pelo sistema ao recriar o fragmento.

Exemplo:

Passagem de dados:

// Criar um fragmento com argumentos
val fragment = MyFragment()
val bundle = Bundle()
bundle.putString("chave", "valor")
fragment.arguments = bundle

// Substituir o fragmento
supportFragmentManager.beginTransaction()
    .replace(R.id.fragment_container, fragment)
    .commit()

Obter dados no fragmento:

// Dentro do fragmento, por exemplo, em onCreate() ou onViewCreated()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.let {
        val valor = it.getString("chave")
        // Usar "valor"
    }
}

Isso garante a preservação e restauração dos dados passados ao recriar o fragmento automaticamente pelo sistema.