RecyclerView 监听滑动条滚动事件触发load more

//倒数第几个开始加载
    private int mCountDown = 1;
    //上一次加载点 所在recyclerview 中的位置
    private int mExLoadPos = -1;

    private OnLoadMore mOnLoadMore;

    private LinearLayoutManager mLinearLayoutManager;

    public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager, OnLoadMore onLoadMore) {
        this.mLinearLayoutManager = linearLayoutManager;
        mOnLoadMore = onLoadMore;
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        int loadPos = recyclerView.getAdapter().getItemCount() - mCountDown;
        //最后一个可见视图在 recyclerview  中的位置
        int lvvPos = mLinearLayoutManager.findLastVisibleItemPosition();
//        System.out.println("last:" + mExLoadPos + " loadpos:" + loadPos + " lvvPos:" + lvvPos + " dy:" + dy);
        //当指定 加载点视图 小于等于最后可见视图,且 向下滑动; 加载机会
        if (dy > 0 && loadPos <= lvvPos) {
            doLoadMore(loadPos);
        }

    }

    private synchronized void doLoadMore(int loadPos) {
        if (mExLoadPos != loadPos) {
            //如果上一次加载点 和本次加载点不同,则可以加载,含括 lastloadpos > loadpos && lastloadpos < loadpos
//            System.out.println("start load more");
            mExLoadPos = loadPos;
            mOnLoadMore.onLoadMore();
        }
    }

    public interface OnLoadMore {
        void onLoadMore();
    }

    public int getmCountDown() {
        return mCountDown;
    }

    public void setmCountDown(int mCountDown) {
        this.mCountDown = mCountDown;
    }

主要用于监听竖直方向滑动事件,当达到设定值  CountDown 时 触发 load more 事件,多用于加载更多内容

时间: 2024-10-05 04:26:03

RecyclerView 监听滑动条滚动事件触发load more的相关文章

vue监听滑动事件,隐藏移动端键盘或者input失去焦点

在页面加载的地方mounted或者created写监听事件,注意使用touchmove事件 window.addEventListener("touchmove",this.myTouchMove) // 监听滑动事件 // 滑动关闭键盘 myTouchMove: function (evt) { if(document.hasFocus){ const inputId = document.getElementById('myBox') // 获取ID inputId.blur()

Android第六期 - ViewPage与菜单栏本地页面监听滑动效果

首先是JiaoyuzixunActivity.java代码部分: package com.gaoxiaotong.ctone.jiaoyuzixun; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONO

复选框 省市区 联动(监听input的change事件)

需求:省市区三级包含复选框按钮以及文字描述.点击文字显示对应的下级地区,点击复选框选择对应的下级区域勾选. 分析:监听input的change事件当点击复选框省  选择对应的第一个市区,同时默认选中第三级区域的第一个.同理监听span或者label(因为label与input的搭配使用) 辅助:后台提供省市区的数据: 两种方式: A:后台直接给dom结构(后台写好基本构架,前段自己在后台code填写需要的dom,class,方便前端开发) B:后台直接给前段一个json数据,前段自己遍历.(和后

JS移动端如何监听软键盘回车事件

移动端经常项目中会有搜索之类的功能,一般实现的是按搜索按钮进行搜索,如果要像PC端一样实现按回车键进行搜索该怎么实现呢? 方法很简单,就是在搜索框的input外面套一个form标签  注意点:form标签一定得添加 action属性(可设置为空) <form action=""><input type="text" name="search" /></form> 移动端软键盘的回车会触发form的submit事

Unity NGUI监听按钮点击事件的三种方法

NGUI版本:3.6.5 1.直接实现OnClick方法: 创建一个脚本,在脚本中实现OnClick()方法,绑定该脚本到按钮上,点击时就会实现OnClick函数内容: 2.使用SendMessage: 选择按钮后,打开Component——NGUI——Interaction,选择Button Message,为按钮添加一个UIButton Message组件: 然后设置UIButton Message中的参数即可: Target:接收按钮消息的游戏对象: Function Name:接收按钮消

监听元素属性改变事件的方法

一.onchange事件只在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效.(就是说你在输入框中输入完内容,输入完了,然后鼠标点别的地方触发该事件)二.oninput事件oninput 事件在用户输入时触发.不支持JS等赋值改变的元素属性.该事件在 <input> 或 <textarea> 元素的值发生改变时触发.(也就是说,不用输入完,边输入边触发该事件)①但是,这个方法是HTML5中的标准事件,IE9以下的浏览器是不支持oninput事件的.②使用时,还需要oni

监听input变化的事件

可以监听input变化的事件 在需要监听input输入值改变的时候,可以通过原声DOM对象的事件oninput/onchange/onkeyup/onkeypress/onkeydown 事件来监听. 这几种事件的触发条件 事件名称 触发条件 onchange 事件会在域的内容改变时发生 oninput 事件在用户输入时触发 onkeyup 事件会在键盘按键被松开时发生 onkeypress 在按下按键时触发, 不能触发所有按键(例如:ALT, CTRL, SHIFT, ESC) onkeydo

监听按钮点击事件的三种方式实现及调试信息输出的三种方式实现

监听按钮点击事件的三种方式实现: 1.匿名内部类 2.外部独立类 3.接口实现 package com.example.button; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View;

vue使用element-ui的el-input监听不了键盘事件解决

vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el-input v-model="name" placeholder="账号" @keyup.enter="doLogin"></el-input> 在执行的时候事件是定义在input外面的div上的,所有没有响应. 解决方法需要在事