[mobile] support filter - part 2

pull/123/head
FongMi 3 years ago
parent 1a9df0a3e0
commit ab8efd5a04
  1. 13
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java
  2. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java
  3. 8
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/ValueAdapter.java
  4. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java
  5. 47
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java
  6. 1
      app/src/mobile/res/layout/fragment_type.xml

@ -1,9 +1,10 @@
package com.fongmi.android.tv.ui.custom;
import androidx.annotation.NonNull;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.RecyclerView;
public class CustomScroller extends RecyclerView.OnScrollListener {
public class CustomScroller extends RecyclerView.OnScrollListener implements NestedScrollView.OnScrollChangeListener {
private final Callback callback;
private boolean loading;
@ -17,8 +18,14 @@ public class CustomScroller extends RecyclerView.OnScrollListener {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if (isLoading() || recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) return;
if (!recyclerView.canScrollVertically(1) && dy > 0 && callback != null) callback.onLoadMore(String.valueOf(++page));
if (isLoading() || recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE || callback == null) return;
if (!recyclerView.canScrollVertically(1) && dy > 0) callback.onLoadMore(String.valueOf(++page));
}
@Override
public void onScrollChange(@NonNull NestedScrollView nestedScrollView, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (isLoading() || callback == null) return;
if (!nestedScrollView.canScrollVertically(1) && scrollY - oldScrollY > 0) callback.onLoadMore(String.valueOf(++page));
}
public void reset() {

@ -99,6 +99,6 @@ public class TypeAdapter extends RecyclerView.Adapter<TypeAdapter.ViewHolder> {
holder.binding.text.setActivated(item.isActivated());
holder.binding.text.setCompoundDrawablePadding(ResUtil.dp2px(4));
holder.binding.text.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, item.getIcon(), 0);
holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(position, item));
holder.binding.getRoot().setOnClickListener(view -> mListener.onItemClick(position, item));
}
}

@ -53,6 +53,12 @@ public class ValueAdapter extends RecyclerView.Adapter<ValueAdapter.ViewHolder>
Filter.Value item = mItems.get(position);
holder.binding.text.setText(item.getN());
holder.binding.text.setActivated(item.isActivated());
holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(mKey, item));
holder.binding.getRoot().setOnClickListener(view -> onItemClick(item));
}
private void onItemClick(Filter.Value value) {
for (Filter.Value item : mItems) item.setActivated(value);
notifyItemRangeChanged(0, getItemCount());
mListener.onItemClick(mKey, value);
}
}

@ -84,7 +84,7 @@ public class VodAdapter extends RecyclerView.Adapter<VodAdapter.ViewHolder> {
holder.binding.site.setVisibility(item.getSiteVisible());
holder.binding.year.setVisibility(item.getYearVisible());
holder.binding.remark.setVisibility(item.getRemarkVisible());
holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(item));
holder.binding.getRoot().setOnClickListener(view -> mListener.onItemClick(item));
holder.binding.getRoot().setOnLongClickListener(v -> mListener.onLongClick(item));
ImgUtil.load(item.getVodPic(), holder.binding.image);
}

@ -28,7 +28,7 @@ import java.util.List;
public class TypeFragment extends BaseFragment implements CustomScroller.Callback, ValueAdapter.OnClickListener, VodAdapter.OnClickListener {
private HashMap<String, String> mExtend;
private HashMap<String, String> mExtends;
private FragmentTypeBinding mBinding;
private FilterAdapter mFilterAdapter;
private CustomScroller mScroller;
@ -68,7 +68,8 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
protected void initView() {
mTypeIds = new ArrayList<>();
mExtend = new HashMap<>();
mExtends = new HashMap<>();
mScroller = new CustomScroller(this);
mFilters = Filter.arrayFrom(getFilter());
mBinding.progressLayout.showProgress();
setRecyclerView();
@ -76,12 +77,16 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
getVideo();
}
@Override
protected void initEvent() {
mBinding.scroller.setOnScrollChangeListener(mScroller);
}
private void setRecyclerView() {
mBinding.filter.setHasFixedSize(true);
mBinding.filter.setAdapter(mFilterAdapter = new FilterAdapter(this));
mBinding.recycler.setHasFixedSize(true);
mBinding.recycler.setAdapter(mVodAdapter = new VodAdapter(this));
mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this));
mBinding.recycler.setLayoutManager(new GridLayoutManager(getContext(), 3));
mBinding.recycler.addItemDecoration(new SpaceItemDecoration(3, 16));
}
@ -110,24 +115,23 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
if (isFolder()) mTypeIds.add(typeId);
if (isFolder() && !mOpen) mBinding.recycler.scrollToPosition(0);
if (page.equals("1")) mVodAdapter.clear();
mViewModel.categoryContent(ApiConfig.get().getHome().getKey(), typeId, page, true, mExtend);
mViewModel.categoryContent(ApiConfig.get().getHome().getKey(), typeId, page, true, mExtends);
}
private void addFilter() {
private void showFilter() {
mBinding.scroller.smoothScrollTo(0, 0);
mFilterAdapter.addAll(mFilters);
}
private void clearFilter() {
private void hideFilter() {
mFilterAdapter.clear();
}
/*private void setClick(ArrayObjectAdapter adapter, String key, Filter.Value item) {
for (int i = 0; i < adapter.size(); i++) ((Filter.Value) adapter.get(i)).setActivated(item);
adapter.notifyArrayItemRangeChanged(0, adapter.size());
mExtend.put(key, item.getV());
if (isFolder()) refresh(1);
else getVideo();
}*/
public void toggleFilter(boolean open) {
if (open) showFilter();
else hideFilter();
mOpen = open;
}
private void refresh(int num) {
String typeId = mTypeIds.get(mTypeIds.size() - num);
@ -135,20 +139,6 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
getVideo(typeId, "1");
}
public void toggleFilter(boolean open) {
if (open) addFilter();
else clearFilter();
mOpen = open;
}
public boolean canGoBack() {
return mTypeIds.size() > 1;
}
public void goBack() {
refresh(2);
}
@Override
public void onLoadMore(String page) {
if (isFolder()) return;
@ -158,6 +148,9 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
public void onItemClick(String key, Filter.Value item) {
mExtends.put(key, item.getV());
if (isFolder()) refresh(1);
else getVideo();
}
@Override

@ -6,6 +6,7 @@
android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
android:id="@+id/scroller"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

Loading…
Cancel
Save