代码之家  ›  专栏  ›  技术社区  ›  4gus71n

Androidx ViewPager无法使用滚动视图行为

  •  4
  • 4gus71n  · 技术社区  · 8 年前

    所以,我将我的项目从使用Android支持库升级到使用AndroidX。我跟着祈祷 documentation 并在AndroidX上更改了每个支持库的替代方案。

    一切都很完美,除了一件事,我有一个屏幕,基本上是一个AppBarLayout,它包含一个工具栏和一个TabLayout,下面我有一个ViewPager,其中包含两个片段,每个选项卡一个,片段内部只是显示一个项目列表。这个想法是,如果我向下滚动两个选项卡的任何一个片段,工具栏就会崩溃。就在我升级到AndroidX之前,它工作得很好。

    关于如何解决这个问题并继续使用AndroidX库有什么想法吗?我真的很想继续使用AndroidX库,但是如果它不起作用,我就不能使用它。

    在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>
    

    在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>
    

    ...
    //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
    ...
    

    在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是1.0.0,googleSupportVersion是28.0.0

    我已经试过了 :

    • 将所有AndroidX依赖项更新到最新版本。

    • 将活动从AppActivityCompat更改为仅活动或碎片活动。

    • 谷歌搜索,很多。

    • this one

    • this

    1 回复  |  直到 7 年前
        1
  •  6
  •   ʍѳђઽ૯ท    7 年前

    你曾经 CoordinatorLayout 之前 AndroidX 自添加以下内容后一切正常的依赖项:

    app:layout_scrollFlags="scroll|enterAlways"
    

    到 Toolbar 之后,你用 androidx.constraintlayout.widget.ConstraintLayout 哪个是 不一样 有些行为,如崩溃或其他可能不工作 ConstraintLayout .

    用途: androidx.coordinatorlayout.widget.CoordinatorLayout androidx.constraintlayout.widget.constraintlayout 在布局的根目录中:

    <?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>
           ...
           ..
           .