Fix filter bug

pull/137/head
FongMi 4 years ago
parent 0fc72c1c5f
commit 42a0a78910
  1. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CollectActivity.java
  2. 15
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomHorizontalGridView.java
  3. 9
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomRowPresenter.java
  4. 29
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomViewPager.java
  5. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  6. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java
  7. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java
  8. 14
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java

@ -72,7 +72,6 @@ public class CollectActivity extends BaseActivity {
@Override
protected void initEvent() {
mBinding.recycler.addOnScrollListener(new CustomScroller());
mBinding.pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {

@ -60,18 +60,9 @@ public class CustomHorizontalGridView extends HorizontalGridView {
}
public boolean executeKeyEvent(@NonNull KeyEvent event) {
boolean handled = false;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_LEFT:
handled = arrowScroll(FOCUS_LEFT);
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
handled = arrowScroll(FOCUS_RIGHT);
break;
}
}
return handled;
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) return arrowScroll(FOCUS_LEFT);
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) return arrowScroll(FOCUS_RIGHT);
return false;
}
public boolean arrowScroll(int direction) {

@ -12,14 +12,21 @@ import com.fongmi.android.tv.utils.ResUtil;
public class CustomRowPresenter extends ListRowPresenter {
private final int spacing;
private final int strategy;
public CustomRowPresenter(int spacing) {
this(spacing, FocusHighlight.ZOOM_FACTOR_MEDIUM);
}
@SuppressLint("RestrictedApi")
public CustomRowPresenter(int spacing, int focusZoomFactor) {
this(spacing, focusZoomFactor, HorizontalGridView.FOCUS_SCROLL_ITEM);
}
public CustomRowPresenter(int spacing, int focusZoomFactor, int strategy) {
super(focusZoomFactor);
this.spacing = spacing;
this.strategy = strategy;
setShadowEnabled(false);
setSelectEffectEnabled(false);
setKeepChildForeground(false);
@ -30,7 +37,7 @@ public class CustomRowPresenter extends ListRowPresenter {
protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) {
super.initializeRowViewHolder(holder);
ViewHolder vh = (ViewHolder) holder;
vh.getGridView().setFocusScrollStrategy(strategy);
vh.getGridView().setHorizontalSpacing(ResUtil.dp2px(spacing));
vh.getGridView().setFocusScrollStrategy(HorizontalGridView.FOCUS_SCROLL_ITEM);
}
}

@ -44,25 +44,14 @@ public class CustomViewPager extends ViewPager {
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return super.dispatchKeyEvent(event) || executeKeyEvent(event);
}
public boolean executeKeyEvent(@NonNull KeyEvent event) {
boolean handled = false;
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DPAD_LEFT:
handled = arrowScroll(FOCUS_LEFT);
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
handled = arrowScroll(FOCUS_RIGHT);
break;
}
}
return handled;
if (findFocus() instanceof TextView) return false;
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) return arrowScroll(FOCUS_LEFT);
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) return arrowScroll(FOCUS_RIGHT);
return false;
}
@Override
public boolean arrowScroll(int direction) {
boolean handled = false;
View currentFocused = findFocus();
@ -100,14 +89,14 @@ public class CustomViewPager extends ViewPager {
}
}
} else if (direction == FOCUS_LEFT) {
if (getCurrentItem() == 0 || currentFocused instanceof TextView) {
if (getCurrentItem() == 0) {
shake(currentFocused);
handled = true;
} else {
handled = pageLeft();
}
} else if (direction == FOCUS_RIGHT) {
if (getAdapter() != null && getCurrentItem() == getAdapter().getCount() - 1 || currentFocused instanceof TextView) {
if (getAdapter() != null && getCurrentItem() == getAdapter().getCount() - 1) {
shake(currentFocused);
handled = true;
} else {
@ -144,7 +133,7 @@ public class CustomViewPager extends ViewPager {
return outRect;
}
boolean pageLeft() {
private boolean pageLeft() {
if (getCurrentItem() > 0) {
setCurrentItem(getCurrentItem() - 1, false);
return true;
@ -152,7 +141,7 @@ public class CustomViewPager extends ViewPager {
return false;
}
boolean pageRight() {
private boolean pageRight() {
if (getAdapter() != null && getCurrentItem() < getAdapter().getCount() - 1) {
setCurrentItem(getCurrentItem() + 1, false);
return true;

@ -1,5 +1,6 @@
package com.fongmi.android.tv.ui.fragment;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@ -7,6 +8,8 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.FocusHighlight;
import androidx.leanback.widget.HorizontalGridView;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.leanback.widget.ListRow;
import androidx.lifecycle.ViewModelProvider;
@ -82,10 +85,11 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback
getVideo();
}
@SuppressLint("RestrictedApi")
private void setRecyclerView() {
CustomSelector selector = new CustomSelector();
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class);
selector.addPresenter(ListRow.class, new CustomRowPresenter(8), FilterPresenter.class);
selector.addPresenter(ListRow.class, new CustomRowPresenter(8, FocusHighlight.ZOOM_FACTOR_NONE, HorizontalGridView.FOCUS_SCROLL_ALIGNED), FilterPresenter.class);
mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
mBinding.recycler.setHeader(getActivity().findViewById(R.id.recycler));

@ -83,8 +83,6 @@ public class HistoryPresenter extends Presenter {
@Override
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
ViewHolder holder = (ViewHolder) viewHolder;
Glide.with(App.get()).clear(holder.binding.image);
}
public static class ViewHolder extends Presenter.ViewHolder {

@ -6,8 +6,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.leanback.widget.Presenter;
import com.bumptech.glide.Glide;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.AdapterVodBinding;
import com.fongmi.android.tv.utils.ImgUtil;
@ -64,8 +62,6 @@ public class VodPresenter extends Presenter {
@Override
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
ViewHolder holder = (ViewHolder) viewHolder;
Glide.with(App.get()).clear(holder.binding.image);
}
public static class ViewHolder extends Presenter.ViewHolder {

@ -3,29 +3,17 @@ package com.fongmi.android.tv.ui.custom;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.fongmi.android.tv.App;
public class CustomScroller extends RecyclerView.OnScrollListener {
private Callback callback;
private final Callback callback;
private boolean loading;
private int page;
public CustomScroller() {
}
public CustomScroller(Callback callback) {
this.callback = callback;
this.page = 1;
}
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) Glide.with(App.get()).resumeRequests();
else Glide.with(App.get()).pauseRequests();
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if (isLoading() || recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE) return;

Loading…
Cancel
Save