Merge pull request #4231 from ByteHamster/garbage-collect

Fixed leaking fragments
This commit is contained in:
H. Lehmann 2020-06-14 19:50:01 +02:00 committed by GitHub
commit 04099e7efa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -86,6 +86,19 @@ public class EpisodeItemListAdapter extends RecyclerView.Adapter<EpisodeItemView
protected void afterBindViewHolder(EpisodeItemViewHolder holder, int pos) {
}
@Override
public void onViewRecycled(@NonNull EpisodeItemViewHolder holder) {
super.onViewRecycled(holder);
// Set all listeners to null. This is required to prevent leaking fragments that have set a listener.
// Activity -> recycledViewPool -> EpisodeItemViewHolder -> Listener -> Fragment (can not be garbage collected)
holder.itemView.setOnClickListener(null);
holder.secondaryActionButton.setOnClickListener(null);
holder.dragHandle.setOnTouchListener(null);
holder.coverHolder.setOnTouchListener(null);
holder.container.setOnCreateContextMenuListener(null);
holder.container.setOnLongClickListener(null);
}
/**
* {@link #notifyItemChanged(int)} is final, so we can not override.
* Calling {@link #notifyItemChanged(int)} may bind the item to a new ViewHolder and execute a transition.

View File

@ -39,7 +39,7 @@ import de.danoeh.antennapod.view.CircularProgressBar;
public class EpisodeItemViewHolder extends RecyclerView.ViewHolder {
private static final String TAG = "EpisodeItemViewHolder";
private final View container;
public final View container;
public final ImageView dragHandle;
private final TextView placeholder;
private final ImageView cover;