1. 程式人生 > >RecyclerView搭配BRVAH實現上拉重新整理的簡單使用

RecyclerView搭配BRVAH實現上拉重新整理的簡單使用

RecyclerView搭配BRVAH實現上拉重新整理的簡單使用

  1. build.gradle 配置說明

新增資源庫新增資源庫

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

新增依賴

dependencies {
        compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:VERSION_CODE'
}

2.Adapter
繼承BaseQuickAdapter,重寫父類的PaymentRecordRvAdapter、convert方法

public class PaymentRecordRvAdapter extends BaseQuickAdapter<PaymentRecordListBean.DataBean,BaseViewHolder> {

    /**
     * Same as QuickAdapter#QuickAdapter(Context,int) but with
     * some initialization data.
     *
     * @param layoutItemResId      The layout resource id of each item.  //子item佈局
     * @param dataBeans             A new list is created out of this one to avoid mutable list  //資料來源
     */
    public PaymentRecordRvAdapter(int layoutItemResId, List<DataBean> dataBeans) {
        super(layoutItemResId,dataBeans);
    }

    /**
     *Description:item的子控制元件監聽事件
     *@param layoutItemResId      The ViewHolder of child  item.  //子item的ViewHolder
     *@param itemData      The data of child item. //子item的資料來源
     */
    @Override
    protected void convert(BaseViewHolder helper, DataBean itemData) {
        helper.setText(R.id.tv_repair_history_recycler_view_item_charge_type,item.getExpenseName())
                .setText(R.id.tv_repair_history_recycler_view_item_charge_time,DateUtils.formatDate(item.getBillTime(),DateUtils.DB_DATA_FORMAT));
    }
}
  1. Activity
public class PaymentRecordActivity extends AppCompatActivity implements View.OnClickListener {
    private final int PAGE_SIZE = 10 ;
    private int pageNum;
    private boolean firstRefresh;
    private LinearLayoutManager recyclerViewManager;
    private List<PaymentRecordListBean.DataBean> adapterDataBeans;
    private PaymentRecordRvAdapter PaymentRecordRvAdapter;
    private RecyclerView rvPaymentRecord;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bill_history);
        initView();
        initData();
    }

    private void initView() {
        rvPaymentRecord = findViewById(R.id.rv_payment_record);
    }

    private void initData() {
        pageNum = 1;
        firstRefresh = true;
        adapterDataBeans = new ArrayList<>();
        refreshRecyclerView(houseId);
    }

    public void refreshRecyclerView(String houseId) {
        ApiBuilder builder = new ApiBuilder()
                .Url(URLConstant.GET_PAYMENT_RECORD)
                .Params("pageNum", pageNum + "")
                .Params("pageSize", PAGE_SIZE + "");
        ApiClient.getInstance().doGet(builder, new CallBack<PaymentRecordListBean>() {
            @Override
            public void onResponse(PaymentRecordListBean data) {
                //do something
                if(data.getData().size() != 0 && firstRefresh){
                    pageNum++;
                    if (PaymentRecordRvAdapter == null) {
                        adapterDataBeans.addAll(data.getData());
                        PaymentRecordRvAdapter = new PaymentRecordRvAdapter(R.layout.bill_history_recyclerview_item, adapterDataBeans);
                        rvPaymentRecord.setAdapter(PaymentRecordRvAdapter);
                        rvPaymentRecord.setLayoutManager(new LinearLayoutManager(PaymentRecordActivity.this));
                        firstRefresh = false;
                        initRvRepairHistoryListener();
                    }
                }else{
                    if(data.getData().size()!=0){
                        pageNum++;
                        adapterDataBeans.addAll( data.getData());
                        if (data.getData().size() != PAGE_SIZE)
                                PaymentRecordRvAdapter.loadMoreEnd();//資料全部載入完成,再次上拉,不再發送資料請求
                        else
                            PaymentRecordRvAdapter.loadMoreComplete();//本次資料載入完成,再次上拉,繼續傳送資料請求
                    }else{
                        PaymentRecordRvAdapter.loadMoreEnd();//資料全部載入完成,再次上拉,不再發送資料請求
                    }
                }
            }

            @Override
            public void onFail(String msg) {
                //......do something
            }
        }, PaymentRecordListBean.class);
    }

    public void initRvRepairHistoryListener() {
        /**
       		* Description:設定item的監聽事件以及上拉重新整理
     	*/
        PaymentRecordRvAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                //......do something
                /*PaymentRecordDetailActivity.actionStart(PaymentRecordActivity.this,adapterDataBeans.get(position).getId());*/
            }
        });
		
		/**
       		* Description:設定item上拉重新整理的回撥
     	*/
        PaymentRecordRvAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                //......do something
               /* refreshRecyclerView(houseId);*/
            }
        }, rvPaymentRecord);

		/**
       		* Description:設定該方法,避免首次請求資料資料時,由於資料量不足以充滿螢幕的情況下,自動發起二次請求 
        */
        PaymentRecordRvAdapter.disableLoadMoreIfNotFullPage();
    }
}