From ec39f8ec76d8fa7ecb80917d054a01b1efa00f20 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 1 Jul 2022 11:19:40 +0800 Subject: [PATCH] Support filter select --- .../java/com/fongmi/bear/bean/Filter.java | 8 +++++++ .../fongmi/bear/ui/activity/HomeActivity.java | 4 ++-- .../fongmi/bear/ui/activity/VodActivity.java | 2 +- .../bear/ui/custom/CustomRowPresenter.java | 2 +- .../fongmi/bear/ui/fragment/VodFragment.java | 22 ++++++++++++++----- .../bear/ui/presenter/FilterPresenter.java | 18 +++++++++++++++ .../java/com/fongmi/bear/utils/Utils.java | 11 ---------- 7 files changed, 47 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/fongmi/bear/bean/Filter.java b/app/src/main/java/com/fongmi/bear/bean/Filter.java index 87a63893b..cd5f62eba 100644 --- a/app/src/main/java/com/fongmi/bear/bean/Filter.java +++ b/app/src/main/java/com/fongmi/bear/bean/Filter.java @@ -64,5 +64,13 @@ public class Filter { public void setSelect(boolean select) { this.select = select; } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Value)) return false; + Value it = (Value) obj; + return getV().equals(it.getV()); + } } } diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java index d4e84c6f1..80b5ccdc6 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java @@ -22,7 +22,7 @@ import com.fongmi.bear.ui.presenter.FuncPresenter; import com.fongmi.bear.ui.presenter.TitlePresenter; import com.fongmi.bear.ui.presenter.VodPresenter; import com.fongmi.bear.utils.ResUtil; -import com.fongmi.bear.utils.Utils; +import com.google.common.collect.Lists; import java.util.List; @@ -69,7 +69,7 @@ public class HomeActivity extends BaseActivity { private void setViewModel() { mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mSiteViewModel.mResult.observe(this, result -> { - for (List items : Utils.chunkList(result.getList(), 5)) { + for (List items : Lists.partition(result.getList(), 5)) { ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter()); adapter.addAll(0, items); mAdapter.add(new ListRow(adapter)); diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java index f1d9b5668..4745a8cbf 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/VodActivity.java @@ -22,8 +22,8 @@ import com.fongmi.bear.utils.ResUtil; public class VodActivity extends BaseActivity { - private ActivityVodBinding mBinding; private TypePresenter mTypePresenter; + private ActivityVodBinding mBinding; private Result mResult; private View mOldView; diff --git a/app/src/main/java/com/fongmi/bear/ui/custom/CustomRowPresenter.java b/app/src/main/java/com/fongmi/bear/ui/custom/CustomRowPresenter.java index f1c7802be..62ebf39f6 100644 --- a/app/src/main/java/com/fongmi/bear/ui/custom/CustomRowPresenter.java +++ b/app/src/main/java/com/fongmi/bear/ui/custom/CustomRowPresenter.java @@ -10,7 +10,7 @@ import com.fongmi.bear.utils.ResUtil; public class CustomRowPresenter extends ListRowPresenter { - private int spacing; + private final int spacing; public CustomRowPresenter(int spacing) { this.spacing = spacing; diff --git a/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java b/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java index dd424b866..9e62ab5c2 100644 --- a/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java +++ b/app/src/main/java/com/fongmi/bear/ui/fragment/VodFragment.java @@ -22,7 +22,7 @@ import com.fongmi.bear.ui.custom.CustomSelector; import com.fongmi.bear.ui.presenter.FilterPresenter; import com.fongmi.bear.ui.presenter.VodPresenter; import com.fongmi.bear.utils.ResUtil; -import com.fongmi.bear.utils.Utils; +import com.google.common.collect.Lists; import com.google.gson.Gson; import java.util.HashMap; @@ -30,9 +30,11 @@ import java.util.List; public class VodFragment extends Fragment { + private HashMap mExtend; private FragmentVodBinding mBinding; private SiteViewModel mSiteViewModel; private ArrayObjectAdapter mAdapter; + private List mFilters; private String getTypeId() { return getArguments().getString("typeId"); @@ -55,6 +57,8 @@ public class VodFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mBinding = FragmentVodBinding.inflate(inflater, container, false); + mFilters = Filter.arrayFrom(getFilter()); + mExtend = new HashMap<>(); return mBinding.getRoot(); } @@ -78,7 +82,7 @@ public class VodFragment extends Fragment { private void setViewModel() { mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mSiteViewModel.mResult.observe(getViewLifecycleOwner(), result -> { - for (List items : Utils.chunkList(result.getList(), 5)) { + for (List items : Lists.partition(result.getList(), 5)) { ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter()); adapter.addAll(0, items); mAdapter.add(new ListRow(adapter)); @@ -87,14 +91,22 @@ public class VodFragment extends Fragment { } private void setFilter() { - for (Filter filter : Filter.arrayFrom(getFilter())) { - ArrayObjectAdapter adapter = new ArrayObjectAdapter(new FilterPresenter()); + for (Filter filter : mFilters) { + FilterPresenter presenter = new FilterPresenter(filter.getKey()); + ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenter); adapter.addAll(0, filter.getValue()); mAdapter.add(new ListRow(adapter)); + presenter.setOnClickListener((view, key, item) -> { + if (mExtend.get(key) == null || !mExtend.get(key).equals(item.getV())) { + mExtend.put(key, item.getV()); + getContent(); + } + }); } } private void getContent() { - mSiteViewModel.categoryContent(getTypeId(), "1", true, new HashMap<>()); + if (mAdapter.size() > mFilters.size()) mAdapter.removeItems(mFilters.size(), mAdapter.size() - mFilters.size()); + mSiteViewModel.categoryContent(getTypeId(), "1", true, mExtend); } } diff --git a/app/src/main/java/com/fongmi/bear/ui/presenter/FilterPresenter.java b/app/src/main/java/com/fongmi/bear/ui/presenter/FilterPresenter.java index 70ca2e014..be8e8c875 100644 --- a/app/src/main/java/com/fongmi/bear/ui/presenter/FilterPresenter.java +++ b/app/src/main/java/com/fongmi/bear/ui/presenter/FilterPresenter.java @@ -1,6 +1,7 @@ package com.fongmi.bear.ui.presenter; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -11,6 +12,21 @@ import com.fongmi.bear.databinding.AdapterFilterBinding; public class FilterPresenter extends Presenter { + private OnClickListener mListener; + private final String mKey; + + public FilterPresenter(String key) { + mKey = key; + } + + public interface OnClickListener { + void onItemClick(View view, String key, Filter.Value item); + } + + public void setOnClickListener(OnClickListener listener) { + this.mListener = listener; + } + @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { return new ViewHolder(AdapterFilterBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); @@ -21,6 +37,8 @@ public class FilterPresenter extends Presenter { Filter.Value item = (Filter.Value) object; ViewHolder holder = (ViewHolder) viewHolder; holder.binding.name.setText(item.getN()); + holder.binding.getRoot().setSelected(item.isSelect()); + setOnClickListener(holder, view -> mListener.onItemClick(holder.binding.getRoot(), mKey, item)); } @Override diff --git a/app/src/main/java/com/fongmi/bear/utils/Utils.java b/app/src/main/java/com/fongmi/bear/utils/Utils.java index 8f6f628a0..03ef3a51f 100644 --- a/app/src/main/java/com/fongmi/bear/utils/Utils.java +++ b/app/src/main/java/com/fongmi/bear/utils/Utils.java @@ -16,9 +16,6 @@ import com.fongmi.bear.App; import com.fongmi.bear.R; import com.google.android.exoplayer2.util.Util; -import java.util.ArrayList; -import java.util.List; - public class Utils { public static String getString(int resId) { @@ -91,12 +88,4 @@ public class Utils { public static String getUserAgent() { return Util.getUserAgent(App.get(), App.get().getPackageName().concat(".").concat(getUUID())); } - - public static List> chunkList(List list, int chunkSize) { - List> chunkList = new ArrayList<>(list.size() / chunkSize); - for (int i = 0; i < list.size(); i += chunkSize) { - chunkList.add(list.subList(i, i + chunkSize >= list.size() ? list.size() - 1 : i + chunkSize)); - } - return chunkList; - } }