¿Usa FragmentContainerView con el componente de navegación?


38

Después de actualizar a Navigation 2.2.0-beta01 desde la versión anterior, lint advierte sobre el reemplazo de la <fragment>etiqueta FragmentContainerView.

Sin embargo, reemplazar solo la etiqueta parece evitar que se infle el gráfico de navegación.

De acuerdo con 2.2.0-alpha01 , FragmentContainerViewse utiliza internamente. ¿Deberíamos ignorar la advertencia de pelusa?


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>

3
¿Cuál es la ventaja de usar FragmentContainerView?
IgorGanapolsky

@IgorGanapolsky Consulte la documentación oficial: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec

@EugenPechanec ¿Por qué necesitamos eso cuando tenemos Jetpack Navigation?
IgorGanapolsky

@IgorGanapolsky Buena pregunta, Jetpack Navigation navega entre fragmentos. Las transiciones de fragmentos (animaciones de entrada / salida) se comportan de manera diferente cuando los fragmentos están dentro FragmentContainerViewy en cualquier otro diseño de contenedor. Las diferencias se describen en la documentación del FCV vinculada anteriormente. Básicamente, se supone que FCV hace que las transiciones funcionen más como es de esperar. O bien, Jetpack Navigation depende de fragmentos. Si los fragmentos están rotos, obtienes una nueva biblioteca de fragmentos fijos o esperas una nueva versión de Navigation que depende de nuevos fragmentos fijos.
Eugen Pechanec

@EugenPechanec Entiendo lo que estás diciendo. Sin embargo, creo que es una molestia para los desarrolladores mantenerse al día con dos API diferentes, cuando Google ha abogado claramente por Jetpack Navigation exclusivamente ...
IgorGanapolsky

Respuestas:


13

¡Importante! Hay problemas conocidos con diferentes versiones de FragmentContainerView. Vea el registro de cambios antes de usar. Lea las correcciones de errores y use una versión reciente de la biblioteca.


Por ahora, también debe declarar dependencia en Fragment 1.2.0-beta02 ya que incluye una solución para este caso de uso.

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

Versión 1.2.0-beta02

11 de octubre de 2019

Corrección de errores

Se solucionó un problema por el cual Fragment's onInflate()no recibía los atributos adecuados FragmentContainerView, rompiendo casos como NavHostFragment. ( b / 142421837 )

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


66
Esta solución no me funcionó.
Glend

@glend Prepare un proyecto mínimo que reproduzca el problema e infórmelo en el rastreador oficial de problemas . ¡Gracias!
Eugen Pechanec

11

El NavigationBasicSample ha sido actualizado a la 2.2.0-alpha01 pero todavía está utilizando la fragmentetiqueta. El NavigationAdvancedSample muestra el uso de la FragmentContainerView, pero el gráfico nav se infla en el código (tienen varios gráficos diferentes) y el fragmento de host correspondiente se añade al FragmentContainerView. Entonces, diría que en este momento deberíamos ignorar la advertencia si queremos una inflación automática.


También noté esto en las muestras. Parece que agregar la última Fragmentdependencia se encarga de la advertencia de pelusa.
almostSane

¿Por qué necesitamos FragmentContainerView?
IgorGanapolsky

Revisé el código en AdvancedSample. ¡Solo me hace vomitar! No sé por qué Team at google tiene que crear y romper cosas de una manera tan incómoda. Ahora puede que tenga que copiar la función de extensión Hoy, pero esto podría romper nuevamente Mañana con alguna actualización en la biblioteca de navegación. ¡Simplemente apesta!
sud007
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.