每次写分页加载的时候都会很纠结,因为各种判断无穷无尽,总是会落下那么几个,让APP不是很完善,追求完美的我如何可以忍受。所以在这里进行一下分页加载开发的总结,以后可以使用。
第一步,先导入分页加载库
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-19'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-19'
第二步,布局编写规范
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:scrollbars="none" />
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
第三步,Activity中的各种判断
public class MyCarrierActivity extends PermissionActivity implements View.OnClickListener{
private TextView tv_title;
private ImageView iv_left;
private RelativeLayout rl_left;
private RelativeLayout rl_right;
private MyAarrierAdapter mAdapter;
private ListView listview;
private SharedPreferences sps;
private int page = 1;
private final int MAX_PAGE = 10;
private SmartRefreshLayout refreshLayout;
private int prePage;//之前的页数
private List<CarrierListBean> listCarrier;
@Override
protected int getContentLayoutId() {
return R.layout.activity_my_carrier;
}
@Override
protected void initWidget() {
//初始化控件
tv_title = findViewById(R.id.tv_title);
iv_left = findViewById(R.id.iv_left);
rl_left = findViewById(R.id.rl_left);
rl_right = findViewById(R.id.rl_right);
listview = findViewById(R.id.listview);
refreshLayout = findViewById(R.id.refreshLayout);
//初始化点击事件
rl_left.setOnClickListener(this);
rl_right.setVisibility(View.GONE);
//其他初始化
iv_left.setImageResource(R.mipmap.ic_back);
tv_title.setText("我关联的承运商");
StatusBarUtil.setColor(this,getResources().getColor(R.color.bg_title),0);
StatusBarUtil.setLightMode(this);
//实例化列表集合
listCarrier = new ArrayList<>();
mAdapter = new MyAarrierAdapter(this,listCarrier);
listview.setAdapter(mAdapter);
listview.setSelector(new ColorDrawable(Color.TRANSPARENT));
//初始化共享参数
sps = getSharedPreferences("clouddriver", Context.MODE_PRIVATE);
//刷新监听
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshLayout) {
prePage = page;//保存之前的请求页数,刷新失败要加载回来
page = 1;
refreshLayout.setEnableLoadMore(true);
requestWeb();
}
});
//加载更多监听
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshLayout) {
page++;
requestWeb();
}
});
}
@Override
protected void intiData() {
refreshLayout.autoRefresh();
}
private void requestWeb(){
OkGo.get((String) Latte.init().getHash().get(ConfigType.CARRIER_LIST.name()))
.tag(this)
.headers("Authorization", "Bearer " + sps.getString("access_token", ""))
.params("size",MAX_PAGE)
.params("current",page)
.execute(new MyCallback() {
@Override
public void onSuccess(String s, Call call, Response response) {
//结束刷新或加载
stopLoad();
CarrierListEntity carrierListEntity = new Gson().fromJson(s,CarrierListEntity.class);
if (carrierListEntity.getCode() == 0) {
if (page == 1) {
listCarrier.clear();
}
List<CarrierListBean> listOne = carrierListEntity.getData().getRecords();
if (!NullUtil.isListEmpty(listOne)) {
if (listOne.size() < MAX_PAGE){
if (page > 1) {
ToastUtil.showViewToast(MyCarrierActivity.this, "已经加载到底了");
}
refreshLayout.setEnableLoadMore(false);
}
listCarrier.addAll(carrierListEntity.getData().getRecords());
mAdapter.notifyDataSetChanged();
}else{
if (page > 1){
ToastUtil.showViewToast(MyCarrierActivity.this,"已经加载到底了");
refreshLayout.setEnableLoadMore(false);
}else if (page == 1){
//没有数据的情况,要展示空页面
mAdapter.notifyDataSetChanged();
}
}
}else{
ToastUtil.showViewToast(MyCarrierActivity.this, carrierListEntity.getMsg());
if (prePage != 0){
page = prePage;
prePage = 0;
}else{
page--;
}
}
}
@Override
public void MyOnError(Call call, Response response, Exception e, String errorMsg) {
ToastUtil.showViewToast(MyCarrierActivity.this, "请检查您的网络");
//结束刷新或加载
stopLoad();
if (prePage != 0){
page = prePage;
prePage = 0;
}else{
page--;
}
}
});
}
/**
* 结束分页框架的刷新或者加载更多
*/
private void stopLoad(){
if (page == 1){
refreshLayout.finishRefresh();
}else{
refreshLayout.finishLoadMore();
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.rl_left:
//返回按钮
finish();
break;
case R.id.rl_right:
//添加承运商
Intent intent = new Intent(this,AddCarrierActivity.class);
startActivity(intent);
break;
}
}
}
以后写分页加载可以参考这个写,如果有不完善的今后还会继续完善,也欢迎大家提出意见。