概述
RecycleView分頁加載封裝,簡單方便,功能齊全
詳細
一、場景:
在項目開發中經常使用到列表集合,而目前RecycleView已經取代ListView,但是RecycleView目前沒有分頁功能,這就需要我們自己實現,一下是我封裝分頁功能的使用方法。
二、分頁實現:
RecycleView分頁主要測量列表滾動到底部,根據不同場景返回不同的viewHolder,每個viewHolder中有不同的itemLayout
(position) {
(position + == getItemCount()) {
() {
}
} {
}
}
返回不同的viewHolder
RecyclerView.ViewHolder (ViewGroup parentviewType) {
(viewType == ) {
View view = LayoutInflater.().inflate(R.layout.)view.setLayoutParams(LinearLayout.LayoutParams(LinearLayout.LayoutParams.ScreenUtils.()))FooterViewHolder(view)} (viewType == ) {
View view = LayoutInflater.().inflate(R.layout.)view.setLayoutParams(LinearLayout.LayoutParams(LinearLayout.LayoutParams.ScreenUtils.()))FailedViewHolder(view)} {
View view = LayoutInflater.().inflate()BaseViewHolder holder = BaseViewHolder(view)holder}
}
在判斷列表滾動到底部的時候,判斷后面還有沒有更多數據,如果有,調用加載更多的接口回調,如果沒有將isHasMore設置成false即可。
(RecyclerView recyclerViewnewState) {
.onScrollStateChanged(recyclerViewnewState)(newState == RecyclerView.&& ((+ ) == getItemCount())) {
.onLoad()}
}
(RecyclerView recyclerViewdxdy) {
.onScrolled(recyclerViewdxdy)= ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition()}
三、使用分頁:
1、見demo中的BaseAdapter、BaseBean、BaseViewHolder和listener、utils、widget包中代碼賦值到你的項目中;

2、創建自己的bean類,繼承BaseBean
public class MyBean extends BaseBean {
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
3、創建自己的adapter,集成BaseAdapter並實現setViewHolder方法
public class MyAdapter extends BaseAdapter {
public MyAdapter(Context context, List<MyBean> list) {
super(context, list);
//設置項布局
setItemLayout(R.layout.layout_item);
}
@Override
public void setViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof BaseViewHolder) {
MyBean bean = (MyBean) list.get(position);
BaseViewHolder baseViewHolder = (BaseViewHolder) holder;
//獲取項布局中控件設置內容
TextView tv = baseViewHolder.itemView.findViewById(R.id.tv_item);
tv.setText(bean.getContent());
} else if (holder instanceof FooterViewHolder) {
if (isHasMore) {
((FooterViewHolder) holder).getTvFooter().setText("正在加載中...");
((FooterViewHolder) holder).getProgressBar().setVisibility(View.VISIBLE);
} else {
((FooterViewHolder) holder).getTvFooter().setText("沒有更多了");
((FooterViewHolder) holder).getProgressBar().setVisibility(View.GONE);
}
} else {
((FailedViewHolder) holder).getTvFailed().setText("網絡異常");
}
}
}
4、調用分頁
1)初始化RecycleView
recyclerView.setHasFixedSize(true); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerView.addItemDecoration(new MyItemDecoration(this, DividerItemDecoration.VERTICAL_LIST, true, 30)); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator());
2)、設置adapter
private void initData() {
for (int i = 0; i < 20; i++) {
MyBean bean = new MyBean();
bean.setContent("第" + i + "條內容");
list.add(bean);
}
adapter = new MyAdapter(this, list);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(onItemClickListener);
adapter.setView(recyclerView);
adapter.setOnLoadMoreListener(onLoadMoreListener);
}
OnLoadMoreListener = OnLoadMoreListener() {
() {
(!.isHasMore()) {
}
(i = * i < * + i++) {
MyBean bean = MyBean()bean.setContent(+ i + ).add(bean)}
= + (== ) {
.setHasMore()}
.notifyDataSetChanged()}
}
以上完成調用,沒有使用其他第三方代碼
下面是效果圖


