diff options
author | ByteHamster <info@bytehamster.com> | 2020-03-20 19:54:55 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-03-20 19:55:56 +0100 |
commit | 1f4801b3b257d24bdadf7d0c2e18768ee02acd4d (patch) | |
tree | a1f5e3e909b84bb1d444b95368142b2f20e75e4f /app | |
parent | 8e10b986b232fc006c02033b4bfa3aa14e79b4ab (diff) | |
download | AntennaPod-1f4801b3b257d24bdadf7d0c2e18768ee02acd4d.zip |
Fixed item flickering while downloading
Diffstat (limited to 'app')
7 files changed, 24 insertions, 11 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java index f8fd99867..2f39b599f 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java @@ -68,6 +68,19 @@ public class EpisodeItemListAdapter extends RecyclerView.Adapter<EpisodeItemView holder.hideSeparatorIfNecessary(); } + /** + * {@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. + * This causes flickering and breaks the download animation that stores the old progress in the View. + * Instead, we tell the adapter to use partial binding by calling {@link #notifyItemChanged(int, Object)}. + * We actually ignore the payload and always do a full bind but calling the partial bind method ensures + * that ViewHolders are always re-used. + * @param position Position of the item that has changed + */ + public void notifyItemChangedCompat(int position) { + notifyItemChanged(position, "foo"); + } + @Nullable public FeedItem getSelectedItem() { return selectedItem; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index fbd6a6670..20999abe9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -151,7 +151,7 @@ public class CompletedDownloadsFragment extends Fragment { items.remove(pos); if (item.getMedia().isDownloaded()) { items.add(pos, item); - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } else { adapter.notifyItemRemoved(pos); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java index cb72153c2..2a7c1f2b1 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -358,7 +358,7 @@ public abstract class EpisodesListFragment extends Fragment { episodes.remove(pos); if (shouldUpdatedItemRemainInList(item)) { episodes.add(pos, item); - listAdapter.notifyItemChanged(pos); + listAdapter.notifyItemChangedCompat(pos); } else { listAdapter.notifyItemRemoved(pos); } @@ -394,7 +394,7 @@ public abstract class EpisodesListFragment extends Fragment { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(episodes, mediaId); if (pos >= 0) { - listAdapter.notifyItemChanged(pos); + listAdapter.notifyItemChangedCompat(pos); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index bba17652a..b4e28567c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -354,7 +354,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem if (pos >= 0) { feed.getItems().remove(pos); feed.getItems().add(pos, item); - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } } } @@ -370,7 +370,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId); if (pos >= 0) { - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 36cda5c84..10a5a81d4 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -115,7 +115,7 @@ public class PlaybackHistoryFragment extends Fragment { if (pos >= 0) { playbackHistory.remove(pos); playbackHistory.add(pos, item); - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } } } @@ -128,7 +128,7 @@ public class PlaybackHistoryFragment extends Fragment { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(playbackHistory, mediaId); if (pos >= 0) { - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 404ea1d8d..0a752b855 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -178,7 +178,7 @@ public class QueueFragment extends Fragment { if (pos >= 0) { queue.remove(pos); queue.add(pos, item); - recyclerAdapter.notifyItemChanged(pos); + recyclerAdapter.notifyItemChangedCompat(pos); refreshInfoBar(); } } @@ -195,7 +195,7 @@ public class QueueFragment extends Fragment { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(queue, mediaId); if (pos >= 0) { - recyclerAdapter.notifyItemChanged(pos); + recyclerAdapter.notifyItemChangedCompat(pos); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index 4bb7ec28a..389996b07 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -215,7 +215,7 @@ public class SearchFragment extends Fragment { if (pos >= 0) { results.remove(pos); results.add(pos, item); - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } } } @@ -228,7 +228,7 @@ public class SearchFragment extends Fragment { for (long mediaId : update.mediaIds) { int pos = FeedItemUtil.indexOfItemWithMediaId(results, mediaId); if (pos >= 0) { - adapter.notifyItemChanged(pos); + adapter.notifyItemChangedCompat(pos); } } } |