Usi FragmentContainerView con il componente di navigazione?


38

Dopo l'aggiornamento a Navigation 2.2.0-beta01 dalla versione precedente, lint dà un avvertimento sulla sostituzione del <fragment>tag con FragmentContainerView.

Tuttavia, la sostituzione del solo tag sembra impedire il gonfiamento del grafico di navigazione.

Secondo 2.2.0-alpha01 , FragmentContainerViewviene utilizzato internamente. Dovremmo ignorare l'avvertimento sui pelucchi?


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
Qual è il vantaggio dell'utilizzo FragmentContainerView?
IgorGanapolsky,

@IgorGanapolsky Vedi la documentazione ufficiale: developer.android.com/reference/androidx/fragment/app/…
Eugen Pechanec

@EugenPechanec Perché ne abbiamo bisogno quando abbiamo Jetpack Navigation?
IgorGanapolsky

@IgorGanapolsky Buona domanda, Jetpack Navigation naviga tra i frammenti. Le transizioni di frammenti (animazioni entra / esci) si comportano diversamente quando i frammenti sono dentro FragmentContainerViewe in qualsiasi altro layout contenitore. Le differenze sono descritte nella documentazione FCV collegata sopra. Fondamentalmente, FCV dovrebbe far funzionare le transizioni più come ci si aspetterebbe. Oppure, la navigazione Jetpack dipende dai frammenti. Se i frammenti sono rotti, ottieni una nuova libreria di frammenti fissi o attendi una nuova versione di Navigazione che dipende da nuovi frammenti fissi.
Eugen Pechanec

@EugenPechanec Ho capito cosa stai dicendo. Tuttavia, penso che sia un fastidio per gli sviluppatori tenere il passo con due diverse API, quando Google ha chiaramente sostenuto esclusivamente la navigazione Jetpack ...
IgorGanapolsky

Risposte:


13

Importante! Esistono problemi noti con diverse versioni di FragmentContainerView. Vedere il log delle modifiche prima dell'uso. Leggi le correzioni dei bug e usa una versione recente della libreria.


Per ora, dovresti anche dichiarare la dipendenza dal frammento 1.2.0-beta02 poiché include una correzione per questo caso d'uso.

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

Versione 1.2.0-beta02

11 ottobre 2019

Correzioni di bug

Risolto il problema per cui i frammenti onInflate()non ricevevano gli attributi corretti FragmentContainerView, rompendo casi come NavHostFragment. ( b / 142421837 )

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


6
Questa soluzione non ha funzionato per me.
Incolla il

@glend Prepara un progetto minimale che riproduca il problema e segnalalo sul tracker del problema ufficiale . Grazie!
Eugen Pechanec,

11

Il NavigationBasicSample è stato aggiornato alla 2.2.0-alpha01, ma è ancora utilizzando il fragmenttag. La NavigationAdvancedSample mostra l'uso di FragmentContainerView, ma il grafico di navigazione viene gonfiato nel codice (hanno diversi grafici differenti) ed il corrispondente frammento host viene aggiunto al FragmentContainerView. Quindi direi che in questo momento dovremmo ignorare l'avvertimento se vogliamo l'inflazione automatica.


Ho notato questo anche nei campioni. Sembra che l'aggiunta dell'ultima Fragmentdipendenza si occupi dell'avvertimento dei filacci.
quasiSane

Perché abbiamo bisogno di FragmentContainerView?
IgorGanapolsky,

Ho controllato il codice in AdvancedSample. Mi fa solo vomitare! Non so perché il team di Google debba creare e rompere le cose in modo così imbarazzante. Ora potrei dover copiare la funzione di estensione oggi, ma questo potrebbe rompersi ancora domani con qualche aggiornamento nella libreria di navigazione. Fa schifo !!
sud007,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.