RecyclerView搭配BRVAH實現上拉刷新的簡單使用
- 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));
}
}
- 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();
}
}