RecyclerView 在项目更改时向上滚动

Posted

技术标签:

【中文标题】RecyclerView 在项目更改时向上滚动【英文标题】:RecyclerView scrolls up when items change 【发布时间】:2022-01-01 12:52:48 【问题描述】:

当适配器提交新列表时,屏幕会向上滚动。提交新列表时如何不滚动屏幕?

obs: setHasFixedSize(false)

    <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_
        android:layout_
        android:scrollbars="vertical">
    
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_
            android:layout_
            android:background="@color/design_default_color_on_primary">
    

                   ...


        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/matchesRecyclerView"
            android:layout_
            android:layout_
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button1"
            tools:itemCount="5"
            tools:listitem="@layout/item_match" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.core.widget.NestedScrollView>

【问题讨论】:

【参考方案1】:

请试试这个

如果您使用ListView - 覆盖以下方法。

@Override
 public int getViewTypeCount()     
     return getCount();
 

 @Override
 public int getItemViewType(int position)     
     return position;
 

如果您使用 RecyclerView - 仅覆盖 getItemViewType() 方法。

 @Override
 public int getItemViewType(int position)     
     return position;
 

【讨论】:

以上是关于RecyclerView 在项目更改时向上滚动的主要内容,如果未能解决你的问题,请参考以下文章

向上滚动recyclerview android时项目正在更新?

向下滚动然后再次向上滚动后,recyclerview 项目之间出现间隙。请看详情

Recyclerview 在滚动期间更改项目

如何在向上滚动时清除 RecyclerView 中的列表

焦点更改时强制 RecyclerView 滚动(Android TV)

在 RecyclerView 中滚动时不可见的项目变得可见