如何获取RecyclerView瀑布流样式下滑动到底的状态呢?
如何获取到瀑布流滑动到底的状态呢?应用场景是网络加载图片,滑动到底了,需要分页加载下一页的时候。
如何获取到瀑布流滑动到底的状态呢?应用场景是网络加载图片,滑动到底了,需要分页加载下一页的时候。
2015-08-08
sorry,刚才直接在这块写的 忘记了判断是否是最后一个item,下面改正代码。
@Override public void onScrollStateChanged(int state) { // 如果停止滑动 if(state == SCROLL_STATE_IDLE){ LayoutManager layoutManager = getLayoutManager(); if(getLayoutManager() instanceof StaggeredGridLayoutManager){ // 获取布局管理器 StaggeredGridLayoutManager layout = (StaggeredGridLayoutManager)layoutManager; // 用来记录lastItem的position // 由于瀑布流有多个列 所以此处用数组存储 int column = layout.getColumnCountForAccessibility(null,null); int positions[] = new int[column]; // 获取lastItem的positions layout.findLastVisibleItemPositions(positions); for(int i=0;i<positions.length ; i++){ /** * 判断lastItem的底边到recyclerView顶部的距离 * 是否小于recyclerView的高度 * 如果小于或等于 说明滚动到了底部 */ // 刚才忘了写判断是否是最后一个item了 if(positions[i] >= (layout.getItemCount()-column) && layout.findViewByPosition(positions[i]).getBottom() <= getHeight()){ /** * 此处实现你的业务逻辑 */ Log.e("到底了","true"); break; } } }else if(getLayoutManager() instanceof LinearLayoutManager){ LinearLayoutManager layout = (LinearLayoutManager) layoutManager; int position = layout.findLastVisibleItemPosition(); // 刚才忘了写判断是否是最后一个item了 if(position-1 == layout.getItemCount() && layout.findViewByPosition(position).getBottom() <= getHeight()){ Log.e("到底了","true"); } } } super.onScrollStateChanged(state); }
RecyclerView的OnScrollLinstener和listView不一样,没办法获取lastItemPostion。
但是它的LayouManager可以找到lastItem和FirstItem的position(注意:因为StaggeredGridLayoutManager
可能有多个列,所以StaggeredGridLayoutManager获取到的lastItem可能有多个)。
这里为了复用,我通过重写onScrollStateChanged自定义了RecyclerView实现,当然,你也使用监听器的方式实现,核心代码如下所示:
@Override public void onScrollStateChanged(int state) { // 如果停止滑动 if(state == SCROLL_STATE_IDLE){ // 获取布局管理器 StaggeredGridLayoutManager layout = (StaggeredGridLayoutManager) getLayoutManager(); // 用来记录lastItem的position // 由于瀑布流有多个列 所以此处用数组存储 int positions[] = new int[layout.getColumnCountForAccessibility(null,null)]; // 获取lastItem的positions /** * 其他布局管理器可使用同样方式获取 */ layout.findLastVisibleItemPositions(positions); for(int i=0;i<positions.length ; i++){ /** * 判断lastItem的底边到recyclerView顶部的距离 * 是否小于recyclerView的高度 * 如果小于或等于 说明滚动到了底部 */ if(layout.findViewByPosition(positions[i]).getBottom() <= getHeight()){ /** * 此处实现你的业务逻辑 */ Log.e("到底了","true"); return; } } } super.onScrollStateChanged(state); }
举报