昨天学习了慕课网上的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
//..............