Usando o FragmentContainerView com o componente Navigation?

38

Após atualizar para o Navigation 2.2.0-beta01 da versão anterior, o lint emite um aviso sobre a substituição da <fragment>tag FragmentContainerView.

No entanto, substituir apenas a marca parece impedir que o gráfico de navegação seja inflado.

De acordo com 2.2.0-alpha01 , FragmentContainerViewé usado internamente. Devemos ignorar o aviso de fiapos?


activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Lint warning: "Replace the <fragment> tag with FragmentContainerView. -->
    <fragment
        android:id="@+id/nav_host_main"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph_main"/>

    <!-- other elements -->

</androidx.constraintlayout.widget.ConstraintLayout>
almostSane
fonte
3
Qual é a vantagem de usar FragmentContainerView?
IgorGanapolsky 30/01
@IgorGanapolsky Consulte a documentação oficial: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec
@EugenPechanec Por que precisamos disso quando temos o Jetpack Navigation?
IgorGanapolsky 8/03
@IgorGanapolsky Boa pergunta, o Jetpack Navigation navega entre fragmentos. As transições de fragmento (animações de entrada / saída) se comportam de maneira diferente quando os fragmentos estão em FragmentContainerViewe em qualquer outro layout de contêiner. As diferenças estão descritas na documentação do FCV vinculada acima. Basicamente, o FCV deve fazer com que as transições funcionem mais como você esperaria. Ou, o Jetpack Navigation depende de fragmentos. Se os fragmentos estiverem quebrados, você obterá uma nova biblioteca de fragmentos corrigida ou aguarde uma nova versão do Navigation, que depende de novos fragmentos corrigidos.
Eugen Pechanec 08/03
@EugenPechanec Eu entendo o que você está dizendo. No entanto, acho que é um incômodo para os desenvolvedores acompanharem duas APIs diferentes, quando o Google claramente defendeu o Jetpack Navigation exclusivamente ...
IgorGanapolsky

Respostas:

13

Importante! Existem problemas conhecidos com diferentes versões do FragmentContainerView. Veja o changelog antes de usar. Leia as correções de erros e use uma versão recente da biblioteca.


Por enquanto, você também deve declarar dependência do Fragmento 1.2.0-beta02, pois inclui uma correção para este caso de uso.

implementation "androidx.fragment:fragment:1.2.0-beta02"

Versão 1.2.0-beta02

11 de outubro de 2019

Correções de bugs

Corrigido um problema em que os fragmentos onInflate()não recebiam os atributos adequados FragmentContainerView, quebrando casos como NavHostFragment. ( b / 142421837 )

Fonte: https://developer.android.com/jetpack/androidx/releases/fragment#1.2.0-beta02

Eugen Pechanec
fonte
6
Esta solução não funcionou para mim.
Glend
@glend Prepare um projeto mínimo que reproduza o problema e relate-o no rastreador oficial de problemas . Obrigado!
Eugen Pechanec 27/02
11

O NavigationBasicSample foi atualizado para 2.2.0-alpha01, mas ainda está usando a fragmenttag. O NavigationAdvancedSample mostra o uso de FragmentContainerView, mas o gráfico de navegação é inflado no código (eles têm vários gráficos diferentes) e o fragmento de host correspondente é adicionado ao FragmentContainerView. Então, eu diria que, neste momento, devemos ignorar o aviso se quisermos inflação automática.

dmapr
fonte
Notei isso também nas amostras. Parece que adicionar a Fragmentdependência mais recente cuida do aviso de fiapos.
nearlySane
Por que precisamos do FragmentContainerView?
IgorGanapolsky 30/01
Eu verifiquei o código no AdvancedSample. Isso só me faz vomitar! Não sei por que a equipe do google precisa criar e quebrar as coisas de maneira tão embaraçosa. Agora, talvez eu precise copiar a função de extensão Hoje, mas isso pode quebrar novamente o Amanhã com alguma atualização na biblioteca de navegação. É uma merda !!
sud007 26/02