Vous utilisez FragmentContainerView avec le composant Navigation?

38

Après la mise à jour vers Navigation 2.2.0-beta01 de la version précédente, lint donne un avertissement concernant le remplacement de la <fragment>balise par FragmentContainerView.

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

Selon 2.2.0-alpha01 , FragmentContainerViewest utilisé en interne. Faut-il ignorer l'avertissement de peluches?


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>
presqueSane
la source
3
Quel est l'avantage d'utiliser FragmentContainerView?
IgorGanapolsky
@IgorGanapolsky Voir la documentation officielle: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec
@EugenPechanec Pourquoi avons-nous besoin de cela lorsque nous avons Jetpack Navigation?
IgorGanapolsky
@IgorGanapolsky Bonne question, Jetpack Navigation navigue entre les fragments. Les transitions de fragments (animations d'entrée / sortie) se comportent différemment lorsque les fragments sont dans FragmentContainerViewet dans toute autre disposition de conteneur. Les différences sont décrites dans la documentation FCV liée ci-dessus. Fondamentalement, FCV est censé rendre les transitions plus efficaces que vous ne le pensez. Ou, Jetpack Navigation dépend de fragments. Si les fragments sont cassés, vous obtenez une nouvelle bibliothèque de fragments fixes ou attendez la nouvelle version de Navigation qui dépend des nouveaux fragments fixes.
Eugen Pechanec
@EugenPechanec Je comprends ce que vous dites. Cependant, je pense qu'il est gênant pour les développeurs de suivre deux API différentes, lorsque Google a clairement préconisé Jetpack Navigation exclusivement ...
IgorGanapolsky

Réponses:

13

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


Pour l'instant, vous devez également déclarer la dépendance au fragment 1.2.0-beta02 car il inclut un correctif pour ce cas d'utilisation.

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

Version 1.2.0-beta02

11 octobre 2019

Corrections de bugs

Correction d'un problème où les fragments onInflate()ne recevaient pas les attributs appropriés de FragmentContainerView, cassant des cas tels que NavHostFragment. ( b / 142421837 )

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

Eugen Pechanec
la source
6
Cette solution n'a pas fonctionné pour moi.
glend le
@glend Veuillez préparer un projet minimal qui reproduit le problème et le signaler sur le traqueur de problème officiel . Merci!
Eugen Pechanec
11

Le NavigationBasicSample a été mis à jour vers 2.2.0-alpha01 mais utilise toujours la fragmentbalise. Le NavigationAdvancedSample montre l'utilisation de la FragmentContainerView, mais le graphique de navigation est gonflé dans le code (ils ont plusieurs graphiques différents) et le fragment d'hôte correspondant est ajouté au FragmentContainerView. Je dirais donc qu'en ce moment, nous devrions ignorer l'avertissement si nous voulons une inflation automatique.

dmapr
la source
J'ai également remarqué cela dans les échantillons. Il semble que l'ajout de la dernière Fragmentdépendance s'occupe de l'avertissement de peluches.
presqueSane
Pourquoi avons-nous besoin de FragmentContainerView?
IgorGanapolsky
J'ai vérifié le code dans AdvancedSample. Ça me fait juste vomir! Je ne sais pas pourquoi l'équipe de Google doit créer et casser des choses d'une manière si maladroite. Maintenant, je devrai peut-être copier la fonction d'extension Aujourd'hui, mais cela pourrait encore une fois casser demain avec une mise à jour dans la bibliothèque de navigation. Ça craint juste !!
sud007