web-dev-qa-db-fra.com

Androidx ViewPager ne fonctionne pas avec le comportement d'affichage défilant

Donc, je mets à jour mon projet en utilisant les bibliothèques de support Android pour utiliser AndroidX. J'ai suivi la miroir documentation et j'ai changé chaque bibliothèque de support pour son alternative sur AndroidX.

Tout fonctionne parfaitement, sauf une chose, j'ai un écran qui est essentiellement un AppBarLayout, qui contient une barre d'outils et un TabLayout, ci-dessous j'ai un ViewPager qui contient deux fragments, un pour chaque onglet, les fragments en interne affichent simplement une liste d'articles. L'idée est que si je fais défiler vers le bas l'un des deux fragments de l'onglet, la barre d'outils devrait s'effondrer. Cela fonctionnait parfaitement juste avant ma mise à jour vers AndroidX.

Des idées sur la façon de résoudre ce problème et de continuer à utiliser la bibliothèque AndroidX? Je veux vraiment m'en tenir à la bibliothèque AndroidX, mais je ne peux pas l'utiliser, si cela ne fonctionne pas.

Voici mon avant et après mes fichiers gradle/xml:

AVANT ANDROIDX XML:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/fragmentPetsTabMainContainer"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/fragmentPetsTabAppBar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/fragmentPetsToolbar"
            app:title="@string/menu_transactions"
            app:titleTextColor="@color/white"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:contentInsetStartWithNavigation="0dp"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <Android.support.design.widget.TabLayout
            Android:id="@+id/fragmentPetsTabLayout"
            style="@style/CustomTabLayout"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:layout_gravity="left"
            Android:background="?attr/colorPrimary"
            app:tabGravity="fill"
            app:tabMode="fixed">

            <Android.support.design.widget.TabItem
                Android:id="@+id/fragmentPetsTabOpen"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/fragment_transaction_open_tab"/>

            <Android.support.design.widget.TabItem
                Android:id="@+id/fragmentPetsTabClosed"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/fragment_transaction_closed_tab"/>

        </Android.support.design.widget.TabLayout>

    </Android.support.design.widget.AppBarLayout>

    <Android.support.v4.view.ViewPager
        Android:id="@+id/fragmentPetsTabViewPager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</Android.support.design.widget.CoordinatorLayout>

APRÈS ANDROIDX XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/fragmentPetsTabMainContainer"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <com.google.Android.material.appbar.AppBarLayout
        Android:id="@+id/fragmentPetsTabAppBar"
        Android:layout_width="match_parent"
        Android:fitsSystemWindows="true"
        Android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            Android:id="@+id/fragmentPetsToolbar"
            app:title="@string/menu_transactions"
            app:titleTextColor="@color/white"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary"
            app:contentInsetStartWithNavigation="0dp"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <com.google.Android.material.tabs.TabLayout
            Android:id="@+id/fragmentPestTabLayout"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:layout_gravity="left"
            Android:background="?attr/colorPrimary"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:layout_scrollFlags="enterAlways"
            app:tabGravity="fill"
            app:tabMode="fixed">

            <com.google.Android.material.tabs.TabItem
                Android:id="@+id/fragmentPetsTabOpen"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/fragment_transaction_open_tab"/>

            <com.google.Android.material.tabs.TabItem
                Android:id="@+id/fragmentPetsTabClosed"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:text="@string/fragment_transaction_closed_tab"/>

        </com.google.Android.material.tabs.TabLayout>

    </com.google.Android.material.appbar.AppBarLayout>

    <androidx.viewpager.widget.ViewPager
        Android:id="@+id/fragmentPetsTabViewPager"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</androidx.constraintlayout.widget.ConstraintLayout>

AVANT LES DÉPENDANCES D'ANDROIDX:

...
//region Support dependencies
supportRecyclerView :  "com.Android.support:recyclerview-v7:$versions.googleSupportVersion",
supportAppCompatV7 : "com.Android.support:appcompat-v7:$versions.googleSupportVersion",
supportV13 : "com.Android.support:support-v13:$versions.googleSupportVersion",
supportDesign : "com.Android.support:design:$versions.googleSupportVersion",
supportCardViewV7 : "com.Android.support:cardview-v7:$versions.googleSupportVersion",
supportContraintLayout : 'com.Android.support.constraint:constraint-layout:1.1.1',
//endregion
...

....
    implementation libraries.kotlin, libraries.supportAppCompatV7, libraries.glide,
        libraries.daggerAndroidSupport, libraries.supportRecyclerView, libraries.supportV13,
        libraries.supportDesign, libraries.supportCardViewV7, libraries.supportContraintLayout,
        libraries.rxJava2, libraries.rxJava2Kotlin, libraries.rxJavaAndroid,
        libraries.supportAppCompatV7
...

APRÈS LES DÉPENDANCES D'ANDROIDX

...
        androidXRecyclerView : "androidx.recyclerview:recyclerview:$versions.androidXVersion",
        androidXAppCompat : "androidx.appcompat:appcompat:$versions.androidXVersion",
        androidXV4 : "androidx.legacy:legacy-support-v4:$versions.androidXVersion",
        androidXV13 : "androidx.legacy:legacy-support-v13:$versions.androidXVersion",
        androidXDesign : "com.google.Android.material:material:$versions.androidXVersion",
        androidXCardView : "androidx.cardview:cardview:$versions.androidXVersion",
        androidXConstraintLayout : "androidx.constraintlayout:constraintlayout:1.1.2",
...
implementation libraries.androidXAppCompat, libraries.androidXRecyclerView,
        libraries.androidXV13, libraries.androidXDesign, libraries.androidXCardView,
        libraries.androidXConstraintLayout
...

androidXVersion est 1.0.0 et googleSupportVersion est 28.0.0

Ce que j'ai essayé jusqu'à présent :

  • Mise à jour de toutes les dépendances AndroidX vers la dernière version.

  • Modification des activités d'AppActivityCompat à simplement Activity ou FragmentActivity.

  • Googlé, beaucoup.

  • J'ai vu qu'il y a des problèmes avec le comportement de défilement, celui-ci en particulier me fait penser que c'est un bug, mais je ne suis pas sûr à 100%. J'ai déjà essayé la solution.

  • A également essayé this

Tout conseil est apprécié.

6
4gus71n

Vous avez utilisé CoordinatorLayout avant AndroidX les dépendances qui allaient bien depuis que vous avez ajouté:

app:layout_scrollFlags="scroll|enterAlways"

Pour le Toolbar et après, vous avez utilisé androidx.constraintlayout.widget.ConstraintLayout qui est pas le même et certains comportements comme l'effondrement ou etc. peuvent ne pas fonctionner avec ConstraintLayout.

tilisez:androidx.coordinatorlayout.widget.CoordinatorLayout au lieu de androidx.constraintlayout.widget.ConstraintLayout à la racine de la mise en page:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout>

    <com.google.Android.material.appbar.AppBarLayout>
     <androidx.appcompat.widget.Toolbar>
      <com.google.Android.material.tabs.TabLayout>
       ...
       ..
       .
6
ʍѳђઽ૯ท