NestedScrollView 内 RecyclerView 中的 SmoothScrollTo 项

Posted

技术标签:

【中文标题】NestedScrollView 内 RecyclerView 中的 SmoothScrollTo 项【英文标题】:SmoothScrollTo item in RecyclerView inside NestedScrollView 【发布时间】:2019-06-14 17:47:12 【问题描述】:

这是我的布局:

<android.support.v4.widget.NestedScrollView
android:layout_
android:layout_
android:fillViewport="true"
android:id="@+id/nsvRoot"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<LinearLayout
    android:layout_
    android:layout_
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical">


    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">

        <android.support.v7.widget.CardView
            android:layout_
            android:layout_
            android:layout_marginBottom="8dp"
            app:cardCornerRadius="0dp"
            app:cardElevation="4dp">

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical">
                <More_Child_Views/>
            </LinearLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            android:layout_
            android:layout_
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            app:cardCornerRadius="0dp"
            app:cardElevation="4dp">

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical">
                <More_Child_Views/>
            </LinearLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            android:layout_
            android:layout_
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            app:cardElevation="4dp">

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical">


                <LinearLayout
                    android:layout_
                    android:layout_
                    android:orientation="vertical"
                    android:visibility="gone">

                    <android.support.v7.widget.RecyclerView
                        android:id="@+id/rvItems"
                        android:layout_
                        android:layout_ />

                </LinearLayout>
            </LinearLayout>
        </android.support.v7.widget.CardView>
    </LinearLayout>

</LinearLayout>

在此布局的底部有一个RecyclerView,ID 为rvItems

我希望根NestedScrollView 滚动到此Recyclerview 中特定项目的位置。

我试过了:

rvItems.getChildAt(itemIndex).getY();

childAt(itemIndex) 返回 nullrvItems.getItemCount() 返回 0,即使回收站视图中显示了 15 多个项目。

我认为这是由于NestedScrollViewRecyclerView 的父级。 如何滚动到 recyclerView 中项目的位置?

【问题讨论】:

发布您的适配器代码 【参考方案1】:

几点说明

请向我们展示您如何声明/设置您的适配器和回收站视图。还要检查您的方法调用的顺序。 (例如,在将适配器传递给 recyclerview 之前先设置适配器)。

什么可以解决这个问题

recyclerView.getLayoutManager().scrollToPosition(10); // 10 being the position of the item

了解更多

https://developer.android.com/reference/android/support/v7/widget/RecyclerView#scrolltoposition

【讨论】:

以上是关于NestedScrollView 内 RecyclerView 中的 SmoothScrollTo 项的主要内容,如果未能解决你的问题,请参考以下文章

在 NestedScrollView 内带有锚点的 Webview

具有固定高度的 Recyclerview 不会在 nestedscrollview 内滚动

Android:TextInputLayout 不适合页面并阻止页面在 NestedScrollView 内滚动

webview 高度在 nestedScrollView 内无限增长

NestedScrollView 没有在 AlertDialog 内扩展高度

无法使用回收视图在 ScrollVIew/NestedScrollView 内滚动 ViewPager