对于我正在进行的项目,我有一个占用整个屏幕的布局。此布局有多个按钮,用于从不同用户提取数据列表。该数据具有任意数量的元素。如果它没有元素,则屏幕不会改变,但如果它有元素,则这些元素显示在RecyclerView的初始视图下方。但是,当从具有RecyclerView中的项目的用户转到回收器视图中没有项目的用户时,屏幕会回到屏幕顶部,因为RecyclerView不再有子项。
我正在寻找一种方法,在RecyclerView中的数据集更新为不保留任何项目后,平滑过渡到视图的顶部。
布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:nestedScrollingEnabled="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.constraint.ConstraintLayout android:id="@+id/insight_constraint_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="0dp">
******* Buttons and stuff here*****
</android.support.constraint.ConstraintLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/activities_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
</LinearLayout>
</ScrollView>
在我的活动中,我将此方法称为更新数据:
public void updateRecyclerView(int week) {
mAdapter.updateDataset(mData.get(week));
}
在我的适配器中我调用了这个函数:
public void updateDataset(List<Details> activities) {
// Copy the data set over to show deleting animation
List<Details> temp = new ArrayList<>(mDataset);
mDataset = temp;
notifyDataSetChanged();
for (int i = mDataset.size() - 1; i >= 0; i --) {
mDataset.remove(i);
notifyItemChanged(i);
}
mDataset = activities;
notifyDataSetChanged();
}