Para uma visualização simples, você pode usar um FrameLayout, como mostrado no exemplo a seguir product_list_host:
Em seguida, na função onCreate() da atividade, modifique a referência do arquivo de layout na função onCreate para apontar para esse novo arquivo de layout:
O layout existente (product_list, neste exemplo) é usado como a visualização raiz do fragmento que você está prestes a criar.
Crie um novo fragmento para gerenciar a IU da tela. É uma prática recomendada ser consistente com o nome do host da sua atividade. O snippet abaixo usa ProductListFragment, por exemplo:
Depois de estabelecida a definição do fragmento, a próxima etapa é mover a lógica da IU dessa tela da atividade para esse novo fragmento. Se você estiver vindo de uma arquitetura baseada em atividades, provavelmente tem muita lógica de criação de visualizações acontecendo na função onCreate() da atividade.
Sua atividade também pode estar controlando quando e como o usuário navega para a próxima tela, como mostrado no exemplo a seguir:
Dentro do seu fragmento, você distribui este trabalho entre onCreateView() e onViewCreated(), com apenas a lógica de navegação restante na atividade:
Em ProductListFragment, observe que não há chamada para setContentView() para aumentar e conectar o layout. Em um fragmento, onCreateView() inicializa a visualização raiz. onCreateView() usa uma instância de um LayoutInflater que pode ser usada para aumentar a visualização raiz com base em um arquivo de recurso de layout. Este exemplo reutiliza o layout product_list existente que foi usado pela atividade porque nada precisa mudar no layout propriamente dito.
Se você tiver alguma lógica de IU residente nas funções onStart(), onResume(), onPause() ou onStop() da atividade que não estejam relacionadas à navegação, mova-as para funções correspondentes de mesmo nome no fragmento.
Observação: o ciclo de vida de um fragmento é gerenciado pela atividade do host e tem retornos de ciclo de vida adicionais diferentes dos usados neste exemplo. O app também pode ter um motivo para modificar outras funções do ciclo de vida. Para ver uma lista completa das funções de ciclo de vida do fragmento e quando usá-las, consulte o guia de fragmentos
Depois de mover toda a lógica da IU para o fragmento, apenas a lógica de navegação permanecerá na atividade.
A última etapa é criar uma instância do fragmento em onCreate(), logo após configurar a visualização de conteúdo:
Como mostrado neste exemplo, FragmentManager salva e restaura automaticamente fragmentos nas mudanças de configuração. Portanto, você só precisa adicionar o fragmento se savedInstanceState for nulo.
Se a atividade receber Extras por meio de um intent, você poderá passá-la para o fragmento diretamente como argumento.
Neste exemplo, o ProductDetailsFragment recebe os argumentos diretamente dos extras de intent da atividade:
Neste ponto, você poderá testar a execução do app com a primeira tela atualizada para usar um fragmento. Continue a migração do restante das telas baseadas em atividades e reserve um tempo para testar após cada iteração.
Depois de usar uma arquitetura baseada em fragmento, você estará pronto para começar a integrar a Navigation component.
Primeiro, adicione as dependências de navegação mais recentes ao projeto, seguindo as instruções nas notas da versão da biblioteca de navegação.