android中RecycleView分頁原生代碼封裝,無任何第三方代


概述

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包中代碼賦值到你的項目中;

image.png

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()}
}

 

以上完成調用,沒有使用其他第三方代碼

下面是效果圖

image.pngimage.png

注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM