75 votes

Utilisation de FragmentContainerView avec un composant de navigation ?

Après la mise à jour de Navigation 2.2.0-beta01 à partir de la version précédente, lint émet un avertissement concernant le remplacement du fichier <fragment> tag avec FragmentContainerView .

Cependant, le remplacement de la balise seule semble empêcher le graphique de navigation d'être gonflé.

Según 2.2.0-alpha01 , FragmentContainerView est utilisé en interne. Devons-nous ignorer l'avertissement de Lint ?


activité_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>

47voto

Il y a encore un bogue qui déclenchera une exception si vous remplacez simplement fragment pour <androidx.fragment.app.FragmentContainerView> . La solution, à l'heure actuelle, comme l'ont indiqué de nombreux moteurs de recherche Google dans ce document fil de bogue est de changer votre code dans votre activité :

val navHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController

21voto

Eugen Pechanec Points 342

Important ! Il existe des problèmes connus avec différentes versions de FragmentContainerView . Voir le journal des modifications avant de l'utiliser. Lisez les corrections de bogues et utilisez une version récente de la bibliothèque.


Pour l'instant, vous devez également déclarer la dépendance à l'égard de Fragment 1.2.0-beta02, car il inclut une correction pour ce cas d'utilisation.

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

Version 1.2.0-beta02

11 octobre 2019

Correction de bogues

Correction d'un problème pour lequel la fonction onInflate() n'a pas reçu les attributs appropriés de FragmentContainerView en brisant des cas tels que NavHostFragment . ( b/142421837 )

Source : https://developer.Android.com/jetpack/androidx/releases/fragment#1.2.0-beta02

15voto

dmapr Points 9

El NavigationBasicSample a été mis à jour vers la version 2.2.0-alpha01, mais il utilise toujours l'interface de l'utilisateur. fragment étiquette. Le site NavigationAvancéEchantillon montre l'utilisation de la FragmentContainerView mais le graphe de la nav est gonflé dans le code (il y a plusieurs graphes différents) et le fragment d'hôte correspondant est ajouté à la balise FragmentContainerView . Je dirais donc qu'à l'heure actuelle, nous devrions ignorer l'avertissement si nous voulons une inflation automatique.

5voto

Meysam Keshvari Points 31

En utilisant Java

NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager()
                .findFragmentById(R.id.nav_host_fragment);
navController = navHostFragment.getNavController();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X