如何获取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);
}举报