From e9930c4b2fc4f483b7d2139fdb0620ad21158584 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Fri, 24 Oct 2025 01:19:45 +0800 Subject: [PATCH] Fix history bug --- .../tv/ui/adapter/BaseDiffAdapter.java | 25 ++++++++++++++++++- .../tv/ui/activity/HistoryActivity.java | 4 +-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java index ea60ff7dd..84a2f1d18 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java @@ -21,6 +21,16 @@ public abstract class BaseDiffAdapter, VH extends Recycler this.differ = new AsyncListDiffer<>(this, new BaseItemCallback()); } + private boolean listsAreSame(List oldList, List newList) { + if (oldList.size() != newList.size()) return false; + for (int i = 0; i < oldList.size(); i++) { + T oldItem = oldList.get(i); + T newItem = newList.get(i); + if (!oldItem.isSameItem(newItem) || !oldItem.isSameContent(newItem)) return false; + } + return true; + } + public T getItem(int position) { return differ.getCurrentList().get(position); } @@ -30,13 +40,21 @@ public abstract class BaseDiffAdapter, VH extends Recycler } public void setItems(List items) { - setItems(items, null); + setItems(items, () -> {}); } public void setItems(List items, Runnable runnable) { differ.submitList(Objects.requireNonNullElseGet(items, ArrayList::new), runnable); } + public void setItems(List items, Callback callback) { + List oldItems = getItems(); + List newItems = Objects.requireNonNullElseGet(items, ArrayList::new); + boolean hasChange = !listsAreSame(oldItems, newItems); + if (!hasChange) callback.onUpdateFinished(false); + else differ.submitList(newItems, () -> callback.onUpdateFinished(true)); + } + public void add(T item, Runnable runnable) { List current = new ArrayList<>(getItems()); current.add(item); @@ -84,4 +102,9 @@ public abstract class BaseDiffAdapter, VH extends Recycler @Override public abstract void onBindViewHolder(@NonNull VH holder, int position); + + public interface Callback { + + void onUpdateFinished(boolean hasChange); + } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java index c9d9984b5..3593c13c8 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java @@ -60,9 +60,9 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl } private void getHistory() { - mAdapter.setItems(History.get(), () -> { + mAdapter.setItems(History.get(), (hasChange) -> { mBinding.progressLayout.showContent(true, mAdapter.getItemCount()); - mBinding.recycler.scrollToPosition(0); + if (hasChange) mBinding.recycler.scrollToPosition(0); }); }