Fixed item touch helper memory leak

pull/214/head
M66B 10 months ago
parent f6e80d917d
commit 85ee7f1d5d

@ -370,7 +370,6 @@ public class FragmentMessages extends FragmentBase
private boolean navigating = false; private boolean navigating = false;
private AdapterMessage adapter; private AdapterMessage adapter;
private ItemTouchHelper itemTouchHelper;
private AdapterMessage.ViewType viewType; private AdapterMessage.ViewType viewType;
private SelectionPredicateMessage selectionPredicate = null; private SelectionPredicateMessage selectionPredicate = null;
@ -2043,13 +2042,10 @@ public class FragmentMessages extends FragmentBase
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
} }
}); });
} else { } else
itemTouchHelper = new ItemTouchHelper(touchHelper); new ItemTouchHelper(touchHelper).attachToRecyclerView(rvMessage);
itemTouchHelper.attachToRecyclerView(rvMessage);
}
} else { } else {
itemTouchHelper = new ItemTouchHelper(touchHelper); new ItemTouchHelper(touchHelper).attachToRecyclerView(rvMessage);
itemTouchHelper.attachToRecyclerView(rvMessage);
selectionPredicate = new SelectionPredicateMessage(rvMessage); selectionPredicate = new SelectionPredicateMessage(rvMessage);
@ -3252,9 +3248,10 @@ public class FragmentMessages extends FragmentBase
} }
private void redraw(RecyclerView.ViewHolder vh) { private void redraw(RecyclerView.ViewHolder vh) {
if (vh != null && itemTouchHelper != null) if (vh != null)
try { try {
itemTouchHelper.onChildViewDetachedFromWindow(vh.itemView); rvMessage.getLayoutManager().detachView(vh.itemView);
rvMessage.getLayoutManager().removeDetachedView(vh.itemView);
} catch (Throwable ex) { } catch (Throwable ex) {
Log.e(ex); Log.e(ex);
} }

@ -130,7 +130,6 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent; import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.selection.SelectionTracker;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.PagerAdapter;
@ -1876,7 +1875,6 @@ public class Helper {
SelectionTracker.SelectionPredicate.class.isAssignableFrom(type) || SelectionTracker.SelectionPredicate.class.isAssignableFrom(type) ||
PagerAdapter.class.isAssignableFrom(type) || PagerAdapter.class.isAssignableFrom(type) ||
RecyclerView.Adapter.class.isAssignableFrom(type) || RecyclerView.Adapter.class.isAssignableFrom(type) ||
ItemTouchHelper.class.isAssignableFrom(type) ||
TwoStateOwner.class.isAssignableFrom(type)) TwoStateOwner.class.isAssignableFrom(type))
try { try {
Log.i("Clearing " + fname); Log.i("Clearing " + fname);

Loading…
Cancel
Save