加载完成,空数据时,隐藏加载布局,解决办法
感谢大神的分享,同时希望这个方法能帮助到有用的人 1、LoadMoreWrapper 中定义一个boolean类型变量 2、在展示界面,判断该变量的值,如果还有数据设置true,如果没有设置为false 3、在LoadMoreWrapper 中,getitemCount方式,中返回数量时判断, hasLoadMore()方法和这个参数一起判断,是否 +1
贴个代码下
@lfei1789 若是完全依照你的描述进行修改是会崩溃的,我尝试了很多次之后,在界面中设置boolean之后,需要再mLoadMoreWrapper.notifyItemRangeRemoved(list.size(), list.size()+1);这样才不「勉强」完成了移除加载更多的布局。我贴一下我的代码,希望帮助到同样困惑的人。
// 我重写了LoadMoreWrapper,源代码中没有变动过的地方我都省略了,方便你去寻找。
public class MyLoadMoreWrapper<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
/*代码省略*/
// 这个是定义的是否加载完成的boolean变量
private boolean mIsLoadOver = true;
// 给一个set方法,用于在外部控制是否隐藏‘加载更多’
public void setLoadOver(boolean loadOver) {
mIsLoadOver = loadOver;
}
/*代码省略*/
@Override
public int getItemCount() {
// 这里将mIsLoadOver 和 hasLoadMore()一起判断
return mInnerAdapter.getItemCount() + ((hasLoadMore() && mIsLoadOver) ? 1 : 0);
}
/*代码省略*/
修改完之后呢,在界面中判断是否加载完数据的地方
mLoadMoreWrapper.setLoadOver(false);
mLoadMoreWrapper.notifyItemRangeRemoved(List.size(), List.size() + 1)
这样就实现了移除‘加载更多的布局’。
PS:有一个不大不小的缺陷就是当加载完成之时,‘加载更多的布局‘会消失掉,然后页面会整体向下移动一段距离,填满刚刚‘加载更多的布局‘的位置。也就是移除一个Item之后整个RecyclerView会有一个向下的动画效果。 PPS:希望可以帮到需要帮助的人~
thx,根据 @2ivy 的方法解决了问题,bty感觉这个项目不怎么更新。。。issue下面好多问题
还有就是数据不足一页同样的问题 但在Adapter没法拿到lastView.getBottom 去判断 我只能想到重写或者监听RecyclerView
setLoadMoreView(null)
我的做法是: 当有下一页时,“加载”不需要移除,并且会自动加载下一页数据 相当于“加载”存在但看不见,看见时会加载下一页 当没有下一页时,设置null&&0 所以只需要在接口返回的地方加上如下 PAGE_SIZE是请求的list的条数
mLoadMoreWrapper.setRefreshing(list.size() < PAGE_SIZE);
重写LoadMoreWrapper,在最后加上
public void setRefreshing(boolean refreshing){
if(refreshing){
setLoadMoreView(LAYOUT_DEFAULT);
}else{
setLoadMoreView(null);
setLoadMoreView(0);
}
}
因为不改加载的布局,所以用了常量LAYOUT_DEFAULT
当加载到最后一页或者内容为空的时候,调setAdapter将adapter设置为mAdapter