Android分页加载页面的一种完善写法举例

每次写分页加载的时候都会很纠结,因为各种判断无穷无尽,总是会落下那么几个,让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;
        }
    }
}

以后写分页加载可以参考这个写,如果有不完善的今后还会继续完善,也欢迎大家提出意见。

猜你喜欢

转载自blog.csdn.net/weixin_38322371/article/details/88710234