轉載請註明:http://blog.csdn.net/duguang77/article/details/40921601
作者信息:
PullToRefresh控件下載地址:https://github.com/chrisbanes/Android-PullToRefresh
百度網盤下載地址:http://pan.baidu.com/s/1o6umifw
(一)導入方法:
1.下載後將extras,library,sample導入到Eclipse中
2.導入後時可能會報錯,請更改依賴包位置
(二)使用方法:
1.XML佈局文件的代碼
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.testpulltoreresh.MainActivity" >
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pl_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
2.設置PullToRefresh的監聽事件
mPullList.setOnRefreshListener(new OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
// 下拉刷新觸發的事件
//獲取格式化的時間
String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
// 更新LastUpdatedLabel
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
///開啓線程模擬調接口填充數據
new GetDataTask().execute();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
// 上提加載觸發的事件
///開啓線程模擬調接口填充數據
new GetDataTask().execute();
}
});
3.設置下拉,上提功能是否可用
// 設置PullToRefreshListView的模式
//Mode.DISABLED 禁用所有ListView動作和刷新處理
//Mode.MANUAL_REFRESH_ONLY 被廢棄的動作,禁用下拉動作處理,但是允許通過手動設置刷新狀態
//Mode.PULL_DOWN_TO_REFRESH 被廢棄的動作,只有下拉動作
//Mode.PULL_UP_TO_REFRESH 被廢棄的動作,只有上提動作
//Mode.PULL_FROM_END 只有上拉動作
//Mode.PULL_FROM_START 只允許用戶將從一開始就可刷新視圖刷新。一開始是頂部或離開時,根據滾動方向。只有下拉動作
//Mode.BOTH 下拉上提所有動作
mPullList.setMode(Mode.BOTH);
ptr:ptrMode="both"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.testpulltoreresh.MainActivity" >
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pl_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="#19000000"
android:dividerHeight="0.5dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:smoothScrollbar="true"
ptr:ptrMode="both"/>
</RelativeLayout>
4.設置下拉,上提加載的提示
// 設置PullRefreshListView上提加載時的加載提示
mPullList.setMode(Mode.BOTH);
mPullList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加載...");
mPullList.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加載...");
mPullList.getLoadingLayoutProxy(false, true).setReleaseLabel("鬆開加載更多...");
// 設置PullRefreshListView下拉加載時的加載提示
mPullList.getLoadingLayoutProxy(true, false).setPullLabel("下拉刷新...");
mPullList.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在加載...");
mPullList.getLoadingLayoutProxy(true, false).setReleaseLabel("鬆開加載更多...");
5.設置下拉,上提刷新的加載動畫
ptr:ptrAnimationStyle="flip" 翻轉動畫
<pre name="code" class="java">ptr:ptrAnimationStyle="rotate"<span style="white-space:pre"> </span>旋轉動畫
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
.......................
ptr:ptrAnimationStyle="flip"/>
6.更改下拉時的icon
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
........
ptr:ptrDrawable="@drawable/ic_rockets" />
7.其他的一些常用屬性
//設置整個mPullRefreshListView的背景色
ptrRefreshableViewBackground
//設置下拉Header或者上拉Footer的背景色
ptrHeaderBackground
//用於設置Header與Footer中文本的顏色
ptrHeaderTextColor
//用於設置Header與Footer中上次刷新時間的顏色
ptrHeaderSubTextColor
//如果爲true會在mPullRefreshListView中出現icon,右上角和右下角,挺有意思的。
ptrShowIndicator
//下面兩個分別設置拉Header或者上拉Footer中字體的類型顏色等等。
ptrHeaderTextAppearance,ptrSubHeaderTextAppearance
//當動畫設置爲rotate時,下拉是是否旋轉。
ptrRotateDrawableWhilePulling
//刷新的時候,是否允許ListView或GridView滾動。覺得爲true比較好。
ptrScrollingWhileRefreshingEnabled
//決定了Header,Footer以何種方式加入mPullRefreshListView,true爲headView方式加入,就是滾動時刷新頭部會一起滾動。
ptrListViewExtrasEnabled
//最後2個其實對於用戶體驗還是挺重要的,如果設置的時候考慮下。其他的屬性自己選擇就好。
//注:上述屬性很多都可以代碼控制,如果有需要可以直接mPullRefreshListView.set屬性名 查看
//以上爲PullToRefresh所有支持的屬性~~
public class MainActivity extends Activity {
private PullToRefreshListView mPullList;
private LinkedList<String> mListItems;
private ArrayAdapter<String> mAdapter;
private String[] mStrings = { "我很善良", "我很溫柔", "我是淘女郎",
"我是阿里郎", "我是大灰狼","我是羊羊羊" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setEventListener();
initData();
}
/**
* 初始化控件
*/
private void initView() {
mPullList = (PullToRefreshListView) findViewById(R.id.pl_refresh);
}
/**
* 設置監聽
*/
private void setEventListener() {
mPullList.setOnRefreshListener(new OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
// 下拉刷新觸發的事件
//獲取格式化的時間
String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
// 更新LastUpdatedLabel
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
///開啓線程模擬調接口填充數據
new GetDataTask().execute();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
// 上提加載觸發的事件
///開啓線程模擬調接口填充數據
new GetDataTask().execute();
}
});
}
/**
* 初始化數據
*/
private void initData() {
// 設置PullToRefreshListView的模式
mPullList.setMode(Mode.BOTH);
// 設置PullRefreshListView上提加載時的加載提示
mPullList.setMode(Mode.BOTH);
mPullList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加載...");
mPullList.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加載...");
mPullList.getLoadingLayoutProxy(false, true).setReleaseLabel("鬆開加載更多...");
// 設置PullRefreshListView下拉加載時的加載提示
mPullList.getLoadingLayoutProxy(true, false).setPullLabel("下拉刷新...");
mPullList.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在加載...");
mPullList.getLoadingLayoutProxy(true, false).setReleaseLabel("鬆開加載更多...");
mListItems = new LinkedList<String>();
mListItems.addAll(Arrays.asList(mStrings));
mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems);
mPullList.setAdapter(mAdapter);
}
private class GetDataTask extends AsyncTask<Void, Void, String[]> {
@Override
protected String[] doInBackground(Void... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
return null;
}
@Override
protected void onPostExecute(String[] result) {
if(mPullList.isHeaderShown()){
mListItems.addFirst("我是新納入的妾——下拉刷新");
}else if(mPullList.isFooterShown()){
mListItems.addLast("我是讓你重回懷抱的妾——上提加載");
}
mAdapter.notifyDataSetChanged();
// 調用刷新完成
mPullList.onRefreshComplete();
super.onPostExecute(result);
}
}
}