十月項目小結(Recycler下拉刷新,上拉分頁加載)

Recycler上拉分頁加載、下拉刷新

該需求採用RecyclerView、SwipeRefreshLayout以及第三方插件BRVAH結合使用方式完成,SwipeRefreshLayout完成下拉刷新、BRVAH完成上拉分頁加載

  1. build.gradle 配置說明

allprojects {
repositories {

maven { url ‘https://jitpack.io’ }
}
}

添加依賴:compile ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30’

  1. Adapter 繼承BaseQuickAdapter,重寫父類的RecordRvAdapter、convert方法詳細地址
> public class PaymentRecordRvAdapter extends BaseQuickAdapter<PaymentRecordListBean.DataBean,BaseViewHolder> {

	private Context mContext;
	/**
		* @param layoutResId      The layout resource id of each item.  //內容的佈局
     	* @param data             A new list is created out of this one to avoid mutable list  //數據源
     */
    public PaymentRecordRvAdapter(int layoutResId, List<DataBean> data,Context mContext) {
        super(layoutItemResId,dataBeans);
        this.mContext = mContext;
    }
    
    @Override
    protected void convert(BaseViewHolder helper, DataBean itemData) {
    	//獲取相應控件實例、設置相應屬性
      ImageView imageView = helper.getView(R.id.iv_icon);
        Glide.with(mContext).load(item.getIcon()).apply(new RequestOptions().centerCrop()).into(imageView);
        helper.setText(R.id.tv_charge_type,item.getExpenseName())
                .setText(R.id.tv_time,DateUtils.formatDate(item.getBillTime(),DateUtils.DB_DATA_FORMAT));
    }
}
  1. layout.xml
 	//RecyclerView結合SwipeRefreshLayout實現下拉刷新功能
	 <android.support.v4.widget.SwipeRefreshLayout
           	 android:id="@+id/srl_refresh"
           	 android:layout_width="match_parent"
          	  android:layout_height="wrap_content">

            	<android.support.v7.widget.RecyclerView
               	 android:layout_marginTop="@dimen/y15"
               	 android:id="@+id/rv_payment_record"
               	 android:layout_width="match_parent"
               	 android:layout_height="wrap_content"/>

        </android.support.v4.widget.SwipeRefreshLayout>
  1. .Activity
/**Description:初始化SwipeRefreshLayout的下拉刷新監聽,整個生命週期有效*/
    protected void initSwipeRefreshLayoutListener(){
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                ......
                adapterDataBeans.clear();//清空數據
                quickAdapter.replaceData(adapterDataBeans);//調用QuickAdapter的replaceData通知數據清空
                quickAdapter.setEnableLoadMore(true);//重新啓動下拉分頁加載響應
                requestRecyclerDate();//啓動刷新後初次數據加載
            }
        });
    }

//初始化QuickAdapter監聽
@Override 
    public void initBrvahListener() {
     	//item點擊事件監聽
        quickAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
           //do something
            }
        });

	//上拉請求數據監聽
        quickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
	            //上拉請求開始前,需要停止swipeRefreshLayout的下拉刷新響應
                swipeRefreshLayout.setEnabled(false);
                requestRecyclerDate();
                //上拉刷新結束後,需要開啓swipeRefreshLayout的下拉刷新響應
                swipeRefreshLayout.setEnabled(true);
            }
        }, recyclerView);
        
		//設置該方法,初次加載數據不足時,系統即會停止響應下次上拉加載數據請求
        quickAdapter.disableLoadMoreIfNotFullPage();
    }

/**Description:添加分頁數據*/
    protected void addAdapterData(List<T> data){
        if (data.size() != 0) {
            pageNum++;
            adapterDataBeans.addAll(data);
            if (data.size() != PAGE_SIZE)
            /**Description:完成本次請求,關閉上拉請求監聽響應*/
                quickAdapter.loadMoreEnd();
            else
            /**Description:完成本次請求*/
                quickAdapter.loadMoreComplete();
        } else {
        	/**Description:完成本次請求,關閉上拉請求監聽響應*/
            quickAdapter.loadMoreEnd();
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章