diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java index 2f57dfd67..88118189b 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.java @@ -275,7 +275,12 @@ public final class TaskListFragment extends InjectingFragment taskListViewModel.getValue(), taskDao) : new PagedListRecyclerAdapter( - taskAdapter, viewHolderFactory, this, taskListViewModel.getValue(), taskDao); + taskAdapter, + recyclerView, + viewHolderFactory, + this, + taskListViewModel.getValue(), + taskDao); taskAdapter.setHelper(recyclerAdapter); ((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); recyclerView.setLayoutManager(new LinearLayoutManager(context)); diff --git a/app/src/main/java/org/tasks/tasklist/PagedListRecyclerAdapter.java b/app/src/main/java/org/tasks/tasklist/PagedListRecyclerAdapter.java index 65134ab0c..030a1ebe2 100644 --- a/app/src/main/java/org/tasks/tasklist/PagedListRecyclerAdapter.java +++ b/app/src/main/java/org/tasks/tasklist/PagedListRecyclerAdapter.java @@ -1,8 +1,10 @@ package org.tasks.tasklist; +import android.os.Parcelable; import androidx.paging.AsyncPagedListDiffer; import androidx.paging.PagedList; import androidx.recyclerview.widget.AsyncDifferConfig; +import androidx.recyclerview.widget.RecyclerView; import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.dao.TaskDao; @@ -11,15 +13,18 @@ import org.tasks.data.TaskContainer; public class PagedListRecyclerAdapter extends TaskListRecyclerAdapter { + private final RecyclerView recyclerView; private AsyncPagedListDiffer differ; public PagedListRecyclerAdapter( TaskAdapter adapter, + RecyclerView recyclerView, ViewHolderFactory viewHolderFactory, TaskListFragment taskList, List list, TaskDao taskDao) { super(adapter, viewHolderFactory, taskList, taskDao); + this.recyclerView = recyclerView; differ = new AsyncPagedListDiffer<>( this, new AsyncDifferConfig.Builder<>(new ItemCallback()).build()); @@ -37,6 +42,15 @@ public class PagedListRecyclerAdapter extends TaskListRecyclerAdapter { differ.submitList((PagedList) list); } + @Override + public void onMoved(int fromPosition, int toPosition) { + Parcelable recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState(); + + super.onMoved(fromPosition, toPosition); + + recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState); + } + @Override public int getItemCount() { return differ.getItemCount();