Retain scroll position in paged lists

gtask_related_email
Alex Baker 6 years ago
parent 6759d02456
commit d73229aa52

@ -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));

@ -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<TaskContainer> differ;
public PagedListRecyclerAdapter(
TaskAdapter adapter,
RecyclerView recyclerView,
ViewHolderFactory viewHolderFactory,
TaskListFragment taskList,
List<TaskContainer> 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<TaskContainer>) 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();

Loading…
Cancel
Save