android RecyclerView.java 适配支持翻页
在 public void onScrolled(RecyclerView view, int dx, int dy)监听 RecyclerView.OnScrollListener。1,重写按键事件接收方法:判断上下翻页按键。关于翻页后的焦点问题;
Android RecyclerView 本身的实现是不支持按键事件触发滚动或者翻页的,这在手机上没什么问题,几乎场景都是直接手指拖动 拉出新的内容,然而在一些无法使用触摸的Android设备上,几乎都是由按键事件触发内容更新,如Android TV 电视 等大屏设备上。而RecyclerView 本身在Android系统上使用是很常见的,但是本身又不支持按键翻页, 以下是解决方法。
1,重写按键事件接收方法:判断上下翻页按键。
public class MyRecyclerView extends RecyclerView {
@Override
public boolean dispatchKeyEvent(android.view.KeyEvent event) {
super.dispatchKeyEvent(event);
if(event.getAction() == android.view.KeyEvent.ACTION_UP)
return false;
View item = getChildAt(0);
if(item == null) return false;
int y0 = item.getBottom();
item = getChildAt(getChildCount() -1);
int ye = item.getBottom();
int dy = ye-y0;
Log.e(TAG, "dispatchKeyEvent dy = ye -y0 : dy = "+ye+"- "+y0 + " = "+dy);
if(event.getKeyCode() == android.view.KeyEvent.KEYCODE_PAGE_DOWN){
scrollBy(0, dy);
} else if(event.getKeyCode() == android.view.KeyEvent.KEYCODE_PAGE_UP){
scrollBy(0, -dy);
}
return false;
}
核心思路:RecyclerView 本身是用于展示列表的,翻页就是滚动到下一页列表,至于每次滚动多长距离?自然就是当前列表中展示的最后一条item 相对于父view的距离de (e : end),减去第一条item 相对于父view的距离d0, dy=de-d0. ,正向滚动,dy 为正数,反向滚动dy为负数。
关于翻页后的焦点问题;
监听 RecyclerView.OnScrollListener
在 public void onScrolled(RecyclerView view, int dx, int dy)
方法里:
获取翻页后的第一个view并申请焦点即可:
getChildAt(0).requestFocus();
更多推荐
所有评论(0)