Prevent scrolling on moving items

This commit is contained in:
M66B 2021-06-01 08:47:50 +02:00
parent 1b90cbf792
commit db1f494d5b
1 changed files with 24 additions and 0 deletions

View File

@ -51,6 +51,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.LocaleList;
import android.os.Parcelable;
import android.provider.CalendarContract;
import android.provider.ContactsContract;
import android.provider.Settings;
@ -283,6 +284,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private Map<Integer, Long> positionKey = new HashMap<>();
private SelectionTracker<Long> selectionTracker = null;
private RecyclerView rv = null;
private Parcelable savedState = null;
enum ViewType {UNIFIED, FOLDER, THREAD, SEARCH}
private NumberFormat NF = NumberFormat.getNumberInstance();
@ -5946,6 +5950,11 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.differ.addPagedListListener(new AsyncPagedListDiffer.PagedListListener<TupleMessageEx>() {
@Override
public void onCurrentListChanged(@Nullable PagedList<TupleMessageEx> previousList, @Nullable PagedList<TupleMessageEx> currentList) {
// https://issuetracker.google.com/issues/70149059
if (rv != null && savedState != null)
rv.getLayoutManager().onRestoreInstanceState(savedState);
savedState = null;
if (gotoTop && previousList != null) {
if (ascending) {
if (currentList != null && currentList.size() > 0) {
@ -6069,6 +6078,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
}
}
if (rv != null)
savedState = rv.getLayoutManager().onSaveInstanceState();
differ.submitList(list);
}
@ -6250,6 +6262,18 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
((WebView) holder.wvBody).loadDataWithBaseURL(null, "", "text/html", StandardCharsets.UTF_8.name(), null);
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
rv = recyclerView;
}
@Override
public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
super.onDetachedFromRecyclerView(recyclerView);
rv = null;
}
void setSelectionTracker(SelectionTracker<Long> selectionTracker) {
this.selectionTracker = selectionTracker;
}