[Android | RecyclerView] OnScrollListener() 参数说明 以及一些额外参数

昨天学习了慕课网上的ListView的异步加载适配器,异步或线程获取图片,图片的一级缓存,滑动时停止加载等优化。很强大,包括连接网络,json数据解析都是用的基础的东西,没用框架。很适合学习。地址:慕课网 . 然后整理了相关代码。传送门:下载

然后感觉想把这套东西放到新鲜的RecyclerView中,练习一下。但是RecyclerView太强大了。自由度很高。有些东西包括LinearLayoutManager都需要自己加载。本文使用的RecyclerView.OnScrollListener()就是对应的 ListView的AbsListView.OnScrollListener。有很多地方发生了改变。所以需要记录下。


在RecyclerView的RecyclerView.Adapter< ViewHolder>适配器中的构造方法里。
构造方法:

public MyAdapter(Context context, List<ImoocBean> list, RecyclerView recyclerView) {

        context.getTheme().resolveAttribute(
                R.attr.selectableItemBackground, new TypedValue(), true);
        //传递context
        this.context = context;
        //传递数据
        this.mList = list;
        //使用传过来的RecyclerView设置滚动监听
        recyclerView.addOnScrollListener( ...);

        // ...... do other things
}

使用recyclerView.addOnScrollListener(); 设置监听器,而不是setOnScrollListener(), 这个方法已经被舍弃了。

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

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

                //dx为RecyclerView沿着X轴(横向)滑动时偏移量. 
                //正数为正向滑动(向右)偏移量,负数为反向滑动(向左)偏移量

                //dy为RecyclerView沿着y轴(纵向)滑动时偏移量. 
                //正数为正向滑动(向下)偏移量,负数为反向滑动(向上)偏移量

                Log.e("tag", "onScrolled: ---------- dx:"+dx+" dy:"+dy);
                RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
                //firstVisibleItem 为RecyclerView 可见的第一item的position
                int lastVisibleItem = ((LinearLayoutManager) manager).
                        findLastVisibleItemPosition();

                //lastVisibleItem 为RecyclerView 可见的最后一个item的position
                int firstVisibleItem = ((LinearLayoutManager) manager).
                        findFirstVisibleItemPosition();

                //visibleItemCount 为RecyclerView 当前可见item的数量
                int visibleItemCount = manager.getChildCount();

                //totalItemCount 为RecyclerView 的所有item的总数量
                int totalItemCount = manager.getItemCount();

                Log.e("test", "onScrolled: ------- firstVisibleItem:" +firstVisibleItem
                        +" lastVisibleItem: " +lastVisibleItem
                        +" visibleItemCount: "+visibleItemCount
                        +" totalItemCount: " +totalItemCount);

                // ...... do
            }
        });

其中一段log信息:

//..............


09-24 16:50:27.751 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:9 lastVisibleItem: 15 visibleItemCount: 7 totalItemCount: 20
09-24 16:50:27.771 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-78
09-24 16:50:27.771 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:8 lastVisibleItem: 15 visibleItemCount: 8 totalItemCount: 20
09-24 16:50:27.781 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-92
09-24 16:50:27.786 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:8 lastVisibleItem: 15 visibleItemCount: 8 totalItemCount: 20
09-24 16:50:27.801 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-83
09-24 16:50:27.801 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:8 lastVisibleItem: 14 visibleItemCount: 7 totalItemCount: 20
09-24 16:50:27.816 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-78


//..............
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Android通过OnScrollListener来监听RecyclerView的位置,我可以给你一些简单的介绍和示例代码。 首先,在RecyclerView的初始化中,你需要为RecyclerView设置一个OnScrollListener。你可以使用RecyclerView.addOnScrollListener()方法来添加一个OnScrollListener。例如: ``` recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); // 在这里处理RecyclerView滚动事件 } }); ``` 在OnScrollListener中,你可以实现onScrolled()方法来监听RecyclerView的滚动事件。onScrolled()方法会在RecyclerView滚动时被调用,你可以在该方法中获取RecyclerView的滚动位置、滚动方向等信息,并据此来实现你的业务逻辑。 例如,下面的示例代码演示了如何在RecyclerView滚动到底部时自动加载更多数据: ``` recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition(); int totalItemCount = layoutManager.getItemCount(); if ((lastVisibleItemPosition == totalItemCount - 1) && dy > 0) { // 滚动到底部且向下滚动,加载更多数据 loadMoreData(); } } }); ``` 在这个示例中,我们首先获取了RecyclerView的布局管理器,然后通过findLastVisibleItemPosition()方法获取了最后一个可见的item的位置,再通过getItemCount()方法获取了RecyclerView的总item数。最后,我们判断最后一个可见item是否是RecyclerView的最后一个item且用户是向下滚动,如果是,则调用loadMoreData()方法加载更多数据。 希望这个简单的介绍和示例代码能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值