在这个布局中,我们包含了一个下拉指示箭头,一个下拉状态文字提示,和一个上次更新的时间。当然,还有一个隐藏的旋转进度条,只有正在刷新的时候我们才会将它显示出来。
布局中所有引用的字符串我们都放在 strings.xml 中,如下所示:
<?xml version="1.0" encoding="utf-8"?>PullToRefreshTest
下拉可以刷新
释放立即刷新
正在刷新…
暂未更新过
上次更新于%1$s前
刚刚更新
时间有问题
二
然后新建一个 RefreshableView 继承自 LinearLayout,代码如下所示:
public class RefreshableView extends LinearLayout implements OnTouchListener {
/**
- 下拉状态
*/
public static final int STATUS_PULL_TO_REFRESH = 0;
/**
- 释放立即刷新状态
*/
public static final int STATUS_RELEASE_TO_REFRESH = 1;
/**
- 正在刷新状态
*/
public static final int STATUS_REFRESHING = 2;
/**
- 刷新完成或未刷新状态
*/
public static final int STATUS_REFRESH_FINISHED = 3;
/**
- 下拉头部回滚的速度
*/
public static final int SCROLL_SPEED = -20;
/**
- 一分钟的毫秒值,用于判断上次的更新时间
*/
public static final long ONE_MINUTE = 60 * 1000;
/**
- 一小时的毫秒值,用于判断上次的更新时间
*/
public static final long ONE_HOUR = 60 * ONE_MINUTE;
/**
- 一天的毫秒值,用于判断上次的更新时间
*/
public static final long ONE_DAY = 24 * ONE_HOUR;
/**
- 一月的毫秒值,用于判断上次的更新时间
*/
public static final long ONE_MONTH = 30 * ONE_DAY;
/**
- 一年的毫秒值,用于判断上次的更新时间
*/
public static final long ONE_YEAR = 12 * ONE_MONTH;
/**
- 上次更新时间的字符串常量,用于作为SharedPreferences的键值
*/
private static final String UPDATED_AT = “updated_at”;
/**
- 下拉刷新的回调接口
*/
private PullToRefreshListener mListener;
/**
- 用于存储上次更新时间
*/
private SharedPreferences preferences;
/**
- 下拉头的View
*/
private View header;
/**
- 需要去下