今天首先给大家分享一个关于RecycleView的加载刷新框架,地址为
https://github.com/WuXiaolong/PullLoadMoreRecyclerView
其次就是瀑布流出现的图片错位的解决。
在做上一个项目时,有需要用瀑布流的地方,第一想到的是用RecycleView
然后在实现上拉加载,和下拉刷新的地方,原本想着自己自定义做加载和刷新。但是呢,因为水平有限,照着网上写,并没有实现,后来经过坚持不懈地查找找到一个第三方框架
这个第三方框架是针对RecycleView加载刷新的比较全,从网址上也可以下载demo 里面有源码。
首先展示效果
一。
首先在build.gradle
compile ‘com.wuxiaolong.pullloadmorerecyclerview:library:1.0.7’
二。
在xml文件中
<com.wuxiaolong.pullloadmorerecyclerview.PullLoadMoreRecyclerView
android:id="@+id/pullLoadMoreRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" />
三。
在java代码中
/*
*设置瀑布流的列数
*/
mPullLoadMoreRecyclerView.setStaggeredGridLayout(2);
//这几句代码是防止当图片上拉加载时,再往上滑时,出现图片错位的现象
StaggeredGridLayoutManager staggeredGridLayoutManager= (StaggeredGridLayoutManager) mPullLoadMoreRecyclerView.getLayoutManager();
staggeredGridLayoutManager.setGapStrateg(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
//这是当设置防止图片错位时,解决可能出现图片上面有一段空白
mPullLoadMoreRecyclerView.getRecyclerView().addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
staggeredGridLayoutManager.invalidateSpanAssignments();
}
});
mPullLoadMoreRecyclerView.getRecyclerView().setLayoutManager(staggeredGridLayoutManager);
//通过监听事件,来实现上拉加载,下拉刷新。 mPullLoadMoreRecyclerView.setOnPullLoadMoreListener(new PullLoadMoreRecyclerView.PullLoadMoreListener() {
@Override
public void onRefresh() {
setRefresh();
getData();
}
@Override
public void onLoadMore() {
pageIndex = pageIndex + 1;
getData();
}
private void getData() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
jinghuaURL = Consts.jinghuaURL + pageIndex + Consts.remain; mjinghuagson.getJinghuaData(jinghuaURL); mjinghuagson.setListCallBack(new JinghuaGson.ListCallBack() {
@Overrid public void getLists(List<JinghuaData.DataBean> list) {
//这是gson解析的数据通过回调传来的数据
//这是将数据直接传到适配器的数据上,是为了保证在上拉加载的过程中能固定在自己上拉加载的地方
mRecyclerViewAdapter.getData().addAll(list);
mPullLoadMoreRecyclerView.setPullLoadMoreCompleted();
}
});
}
}, 1000);
}
private void setRefresh() {
mRecyclerViewAdapter.getData().clear();
pageIndex = 1;
}
});
由于时间因素,后续,我会将代码整理一下,再发出去。