From 0e9015772f48620e24fd6cc224f9369bc8ae3dd5 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Wed, 22 Oct 2025 16:12:40 +0800 Subject: [PATCH] Optimize vod list --- .../java/com/fongmi/android/tv/bean/Vod.java | 8 +++++- .../tv/ui/adapter/BaseDiffAdapter.java | 10 +++---- .../android/tv/ui/adapter/VodAdapter.java | 26 ++----------------- .../android/tv/ui/fragment/TypeFragment.java | 8 +++--- 4 files changed, 17 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index d5252c75b..18a3b5435 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -25,6 +25,7 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; @Root(strict = false) public class Vod implements Parcelable, Diffable { @@ -309,6 +310,11 @@ public class Vod implements Parcelable, Diffable { return getVodId().equals(it.getVodId()); } + @Override + public int hashCode() { + return Objects.hash(getVodId()); + } + @Override public int describeContents() { return 0; @@ -382,6 +388,6 @@ public class Vod implements Parcelable, Diffable { @Override public boolean isSameContent(Vod other) { - return getVodName().equals(other.getVodName()) && getVodPic().equals(other.getVodPic()) && getVodRemarks().equals(other.getVodRemarks()) && getSite().equals(other.getSite()); + return getVodName().equals(other.getVodName()) && getVodPic().equals(other.getVodPic()) && getVodRemarks().equals(other.getVodRemarks()) && Objects.equals(getSite(), other.getSite()); } } 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 4c9edc68b..de3837cd3 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 @@ -33,11 +33,11 @@ public abstract class BaseDiffAdapter, VH extends Recycler } public void setItems(List items, Runnable runnable) { - differ.submitList(items, runnable); - } - - public void addItem(T item) { - addItem(item, null); + if (items == null || items.isEmpty()) { + differ.submitList(new ArrayList<>(), runnable); + } else { + differ.submitList(items, runnable); + } } public void addItem(T item, Runnable runnable) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java index da59d7f35..9b013f3ec 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java @@ -4,7 +4,6 @@ import android.view.LayoutInflater; import android.view.ViewGroup; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; import com.fongmi.android.tv.bean.Style; import com.fongmi.android.tv.bean.Vod; @@ -17,19 +16,14 @@ import com.fongmi.android.tv.ui.holder.VodListHolder; import com.fongmi.android.tv.ui.holder.VodOvalHolder; import com.fongmi.android.tv.ui.holder.VodRectHolder; -import java.util.ArrayList; -import java.util.List; - -public class VodAdapter extends RecyclerView.Adapter { +public class VodAdapter extends BaseDiffAdapter { private final OnClickListener listener; - private final List mItems; private final Style style; private final int[] size; public VodAdapter(OnClickListener listener, Style style, int[] size) { this.listener = listener; - this.mItems = new ArrayList<>(); this.style = style; this.size = size; } @@ -45,22 +39,6 @@ public class VodAdapter extends RecyclerView.Adapter { return style; } - public void addAll(List items) { - int position = mItems.size() + 1; - mItems.addAll(items); - notifyItemRangeInserted(position, items.size()); - } - - public void clear() { - mItems.clear(); - notifyDataSetChanged(); - } - - @Override - public int getItemCount() { - return mItems.size(); - } - @Override public int getItemViewType(int position) { return style.getViewType(); @@ -68,7 +46,7 @@ public class VodAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull BaseVodHolder holder, int position) { - holder.initView(mItems.get(position)); + holder.initView(getItem(position)); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java index 1664806b2..9ab5b2c80 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java @@ -131,17 +131,15 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac } private void getHome() { - mViewModel.homeContent(); - mAdapter.clear(); + mAdapter.clear(() -> mViewModel.homeContent()); } private void getVideo() { mScroller.reset(); - getVideo(getTypeId(), "1"); + mAdapter.clear(() -> getVideo(getTypeId(), "1")); } private void getVideo(String typeId, String page) { - if ("1".equals(page)) mAdapter.clear(); if ("1".equals(page) && !mBinding.swipeLayout.isRefreshing()) mBinding.progressLayout.showProgress(); if (isHome() && "1".equals(page)) setAdapter(getParent().getResult()); else mViewModel.categoryContent(getKey(), typeId, page, true, mExtends); @@ -160,7 +158,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac private void addVideo(Result result) { Style style = result.getList().get(0).getStyle(getStyle()); if (!style.equals(mAdapter.getStyle())) setStyle(style); - mAdapter.addAll(result.getList()); + mAdapter.addItems(result.getList()); } private void checkMore(int count) {