A well-established wording Android page to load a page, for example

Each time write page load time will be very tangled, because the judge endless variety, always will fall a few, let APP is not perfect, perfectionist How can I endure. So to sum up page load here developed, can be used later.

The first step, first import tab to load the library

implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-19'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-19'

The second step preparation of specifications, layout

<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>

A third step, Activity is determined in a variety of

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;
        }
    }
}

After the write load can refer to this page to write, if there are imperfections in the future will continue to improve, but also welcome comments.

Guess you like

Origin blog.csdn.net/weixin_38322371/article/details/88710234