基于SmartRefreshLayout+RecyclerView封装,使得开发者不再需要自己在项目中频繁处理分页记录等繁琐状态。
github地址
使用方法:
<com.gl.gllibrary.widget.pullrefersh.PullRefreshRecyclerView
android:id="@+id/mPullRefreshRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoLoadMore="true"
app:autoRefresh="true"
app:gl_layoutManager="StaggeredGrid"
app:gl_spanCount="1"
app:gl_layoutOritation="VERTICAL"
app:gl_reverseLayout="false" />
可以在xml中定义layoutManager的各种属性,自动加载等。
代码中可以设置默认加载个数,起始页,以及空态错误页面
val emptyView = EmptyView(this)
emptyView.butRetry.setOnClickListener {
mPullRefreshRecyclerView.mRefreshPageBean.current_page_index = 1
requestData(true, mPullRefreshRecyclerView.mRefreshPageBean.current_page_index)
}
mPullRefreshRecyclerView.mRefreshPageBean.page_load_size = 20
mPullRefreshRecyclerView.setEmptyView(emptyView)
mPullRefreshRecyclerView.refreshListener = this
mPullRefreshRecyclerView.mRefreshPageBean.first_page_index = 540
adapter = ArtListAdapter()
mPullRefreshRecyclerView.setAdapter(adapter)
空态页面继承PullRefreshEmptyView根据状态显示数据
public class EmptyView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : PullRefreshEmptyView(context, attrs, defStyleAttr) {
init {
LayoutInflater.from(context).inflate(R.layout.empty_view, this, true)
}
override fun onEmptyStatus(status: Int) {
if (status == RefreshPageBean.SHOW_EMPTY_STATUS) {
tvErrorMsg.text = "暂无数据"
} else if (status == RefreshPageBean.SHOW_EMPTY_ERROR_STATUS) {
tvErrorMsg.text = "当前页面加载失败"
}
}
}
请求网络回调中调用finishLoadRequest,传入是否成功,下拉刷新,加载更多区分,并且在onDataNotifyChanged刷新即可
fun requestData(isRefresh: Boolean, page: Int) {
HttpClient.getRetrofit().create(WanAndroidApi::class.java)
.articleList(page)
.enqueue(object : Callback<ArticleListResult> {
override fun onResponse(
call: Call<ArticleListResult>,
response: Response<ArticleListResult>
) {
val result = response.body() as ArticleListResult
mPullRefreshRecyclerView.finishLoadRequest(isRefresh,true, result.mData.datas,false)
}
override fun onFailure(call: Call<ArticleListResult>, t: Throwable) {
mPullRefreshRecyclerView.finishLoadRequest(isRefresh,false)
}
})
}
override fun onRefresh() {
requestData(true, mPullRefreshRecyclerView.mRefreshPageBean.current_page_index)
}
override fun onLoadMore() {
requestData(false, mPullRefreshRecyclerView.mRefreshPageBean.current_page_index)
}
override fun onDataNotifyChanged(list: MutableList<Any>,isAllLoaded:Boolean) {
if (isAllLoaded){
Toast.makeText(this,"没有更多数据",Toast.LENGTH_SHORT).show()
}
adapter.mData = list as MutableList<DataX>
adapter.notifyDataSetChanged()
}
ezgif.com-gif-maker.gif
网友评论