前:本文为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中复制或下载;
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、我们只需要在上面的回调函数中写正确的逻辑即可
四、效果图