使用不同的RecyclerView数据集,同时在ScrollView中保留动画

时间:2018-06-15 20:34:00

标签: android animation android-recyclerview scrollview

对于我正在进行的项目,我有一个占用整个屏幕的布局。此布局有多个按钮,用于从不同用户提取数据列表。该数据具有任意数量的元素。如果它没有元素,则屏幕不会改变,但如果它有元素,则这些元素显示在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();
}

0 个答案:

没有答案