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

来源:互联网 发布:小强软件测试 编辑:程序博客网 时间:2024/04/24 13:52

昨天学习了慕课网上的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: 2009-24 16:50:27.771 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-7809-24 16:50:27.771 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:8 lastVisibleItem: 15 visibleItemCount: 8 totalItemCount: 2009-24 16:50:27.781 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-9209-24 16:50:27.786 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:8 lastVisibleItem: 15 visibleItemCount: 8 totalItemCount: 2009-24 16:50:27.801 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-8309-24 16:50:27.801 11872-11872/com.neusoft.lic.imoocrecyclerview E/test: onScrolled: ------- firstVisibleItem:8 lastVisibleItem: 14 visibleItemCount: 7 totalItemCount: 2009-24 16:50:27.816 11872-11872/com.neusoft.lic.imoocrecyclerview E/tag: onScrolled: ---------- dx:0 dy:-78//..............
0 0
原创粉丝点击