android 下拉刷新+底部加载更多 QJPageReloadView使用

前:本文为QiaoJim原创,转载请附原文链接,谢谢合作!

http://blog.csdn.net/qiao_jim/article/details/79082250

-----------------------------------------------------------------------------------------------

本篇主要简单介绍QJPageReloadView的使用,主要能实现:1、下拉刷新;2、底部加载更多;3、支持自定义属性

本篇主要着重使用示例,想了解内部封装的请戳:android 下拉刷新+底部加载更多 view组件封装

源码GitHub地址:QiaoJim/QJViews

-----------------------------------------------------------------------------------------------

一、快速接入

首先看效果,直接调到文章最后,有截图。如果是想要的效果,再看示例或内部封装

导入3个文件:QJPageReloadView.java,QJHeaderView.java,values/attrs.xml

导入方式:

1、从GitHub中复制或下载;

扫描二维码关注公众号,回复: 2875117 查看本文章

2、cdsn下载,戳:


二、布局文件中使用QJPageReloadView组件

在布局文件中,使用QJPageReloadView。注意在xml中设置命名空间,新版本as使用http://schemas.android.com/apk/res-auto即可,旧版本需要使用“http://schemas.android.com/apk/res/”+“包名”。下面我们使用qjviews命名

<?xml version="1.0" encoding="utf-8"?>
<com.qiaojim.qjviews.QJPageReloadView.QJPageReloadView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:qjviews="http://schemas.android.com/apk/res-auto"
    android:id="@+id/qj_page_reload_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    qjviews:header_view_text_size="@dimen/header_view_text_size"
    qjviews:footer_view_text_size="@dimen/header_view_text_size"
    qjviews:refresh_max_height="@dimen/refresh_max_height"
    qjviews:refresh_enable="true"
    qjviews:refresh_min_height="@dimen/refresh_min_height"
    qjviews:auto_load="true"
    qjviews:load_more_enable="true"
    qjviews:header_view_text_color="@color/orange"
    qjviews:footer_view_text_color="@color/orange"
    qjviews:refresh_progressbar_size="50px">

</com.qiaojim.qjviews.QJPageReloadView.QJPageReloadView>
关于以上一些自定义属性的说明:

header_view_text_size:顶部下拉刷新的提示文字的大小,dimension

header_view_text_color:顶部下拉刷新的提示文字的颜色,reference|color

header_view_bgd_color:顶部下拉刷新的view背景的颜色,reference|color

footer_view_text_size:与header类似

footer_view_text_color

footer_view_bgd_color

refresh_max_height:顶部下拉刷新view的最大高度(防止过度下拉),dimension

refresh_min_height:顶部下拉刷新view的最小高度(刷新临界值),dimension

refresh_enable:下拉刷新功能是否启用,boolean

refresh_progressbar_size:顶部下拉刷新view中的圆形进度条的大小,dimension

load_more_enable:底部加载更多功能是否启用,boolean

auto_load:底部自动加载更多是否启用(仅在load_more_enable为true的前提下有效),boolean


三、activity等中控制QJPageReloadView

1、findViewById找到QJPageReloadView,得到一个实例

2、实现QJPageReloadView.QJPageReloadViewListener接口,回调刷新onRefresh()或加载更多onLoadMore()函数。

注意看回调函数的说明(在下面的demo中)

    private void initListener() {
        listener = new QJPageReloadView.QJPageReloadViewListener() {

            /*
            * 异步加载任务开始前回调,可准备自定义的提示UI
            * main线程中,可直接操作更新UI*/
            @Override
            public void onStart() {
//                Log.e(TAG, "======== onStart()回调 ==========" + Thread.currentThread().getName());

            }

            /*
            * 下拉刷新动作后回调
            * 非UI线程,可执行耗时的加载任务*/
            @Override
            public boolean onRefresh(int totalCount) {
//                Log.e(TAG, "======== onRefresh()回调 ==========" + Thread.currentThread().getName());

                List<String> list = new ArrayList<>();
                for (int i = 0; i < 10; i++) {
                    list.add("" + start--);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                Message message = handler.obtainMessage();
                message.what = QJReloadHandler.REFRESH_OK;
                message.obj = list;
                handler.sendMessage(message);

                return true;
            }

            /*
            * 加载更多动作后回调
            * 非UI线程,可执行耗时的加载任务*/
            @Override
            public boolean onLoadMore(int totalCount) {
//                Log.e(TAG, "======== onLoadMore()回调 ==========" + Thread.currentThread().getName());

                List<String> list = new ArrayList<>();
                for (int i = 0; i < 10; i++) {
                    list.add("" + end++);
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                Message message = handler.obtainMessage();
                message.what = QJReloadHandler.LOAD_MORE_OK;
                message.obj = list;
                handler.sendMessage(message);

                return true;
            }

            /*
            * 异步加载任务完成后回调,可控制自定义的提醒UI
            * 即 onRefresh()、onLoadMore() return true后回调
            * main线程中,可直接操作更新UI*/
            @Override
            public void onFinished() {
//                Log.e(TAG, "======== onFinished()回调 ==========" + Thread.currentThread().getName());
            }

            /*
            * 异步加载任务完成后错误,可控制自定义的提醒UI
            * 即 onRefresh()、onLoadMore() return false后回调
            * main线程中,可直接操作更新UI*/
            @Override
            public void onError() {
//                Log.e(TAG, "======== onError()回调 ==========" + Thread.currentThread().getName());
            }

        };
    }


3、设置listview的adapter(自定义,BaseAdapter的子类即可),下面demo中的QJReloadViewAdapter即extendsBaseAdapter

        qjPageReloadView = findViewById(R.id.qj_page_reload_view);
        QJReloadViewAdapter adapter = new QJReloadViewAdapter(this, qjPageReloadView);
        adapter.setData(dataList);
        qjPageReloadView.setAdapter(adapter);

        // 下一行demo会屏蔽xml中设置的自定义属性
        qjPageReloadView.setAutoLoadMore(false);

        qjPageReloadView.setQJPageReloadViewListener(listener);
4、我们只需要在上面的回调函数中写正确的逻辑即可


四、效果图

    



猜你喜欢

转载自blog.csdn.net/Qiao_Jim/article/details/79082250
今日推荐