在nestedscrollview中使用时,分页库会加载所有数据

时间:2019-02-06 06:26:40

标签: android android-studio android-layout android-architecture-components android-jetpack

我正在使用分页库加载数据并填充放置在nestedscrollview内的recyclerview。但这就像分页一样自动进行,直到从API获取所有数据为止。我知道这是因为nestedscrollview。但是不幸的是,我的布局需要滚动视图,因为在此片段中我除了recyclerview之外还有一个顶层。 这是我的布局

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
   >
   <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

   //have a layout here which scrolls with recyclerview

      <Recyclerview />

   </ConstraintLayout>

</NestedScrollView>

当我不使用nestedscrollview时,一切正常。 googlesamples git repo中存在一个未解决的问题,重新解决了这个问题。

https://github.com/googlesamples/android-architecture-components/issues/215

有谁知道,当recyclerview位于带有Android jetpack的分页库的滚动视图中时,如何实现分页。我知道我们可以实现将嵌套侦听器附加到nestedscrollview的传统类型的分页,但是我希望通过体系结构组件库实现分页。 https://developer.android.com/topic/libraries/architecture/paging/

3 个答案:

答案 0 :(得分:0)

我通过删除滚动视图并在滚动时隐藏工具栏来修改布局解决了此问题。当向下滚动对我有用时,我们总是使用简单的协调器布局scrollflag来隐藏工具栏。这可能不是这个问题的正确答案,但是对于某些人来说,如果您不从事复杂的设计,这可能会有所帮助。我无法从设计中删除nestedscrollview,因为无法找到解决此问题的合适方法。

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlwaysCollapsed">

            <android.support.constraint.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                 //My top layout section is inside this constraint layout

            </android.support.constraint.ConstraintLayout>

        </android.support.v7.widget.Toolbar>

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <com.wacmob.promode.musicapp.view.customview.MusicTextView
            android:id="@+id/textView10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="list heading"
            android:textColor="@color/textColorBlack"
            android:textSize="18sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_recommended"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

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

答案 1 :(得分:0)

分页库不能与nestedScroolView一起使用。因此,您必须使用android:nestedScrollingEnabled="true"将NesteScrollView更改为ScroolView,如下所示:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:nestedScrollingEnabled="true"
   >
   <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

   //have a layout here which scrolls with recyclerview

      <Recyclerview />

   </ConstraintLayout>

</ScrollView>

答案 2 :(得分:0)

Okey我找到了一个解决方案,这有点奇怪,但是效果很好。 我将需要滚动的所有视图在NestedScrollView中放入CollapsingToolbarLayout中。之后,我创建一个视图寻呼机,并用NestedScrollView包装它。我创建一个片段并将Recyclerview放在片段内。 这是视图层次结构:

       <androidx.coordinatorlayout.widget.CoordinatorLayout
                style="@style/AppLayout.Full.Vertical.NoPadding"
                android:background="@color/colorSurface">

                <com.google.android.material.appbar.AppBarLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorSurface">

                    <com.google.android.material.appbar.CollapsingToolbarLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:layout_scrollFlags="scroll|exitUntilCollapsed"
                        app:titleEnabled="false">

                        <LinearLayout style="@style/AppLayout.Wrap.Vertical.NoPadding">

                            // stuff need to scroll with the recyclerview like button, textview,...

                        </LinearLayout>

                    </com.google.android.material.appbar.CollapsingToolbarLayout>

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

                <androidx.core.widget.NestedScrollView
                    android:id="@+id/scrollView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:fillViewport="true"
                    app:layout_behavior="@string/appbar_scrolling_view_behavior">

                    // add the fragment contains the recyclerview to this viewpager

                    <androidx.viewpager.widget.ViewPager
                        android:id="@+id/viewPager"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" />

                </androidx.core.widget.NestedScrollView>
            </androidx.coordinatorlayout.widget.CoordinatorLayout>

好的,请确保创建一个片段并将RecyclerView添加到带有android:nestedScrollingEnabled="true"属性的片段内。并将片段添加到ViewPager。