PullToRefreshListView的簡單使用,pullrefreshlistview
在前面介紹過XListView的使用,這裡介紹一個類似的清單控制項:PullToRefreshListView,它來自開源項目PullToRefresh,裡面還有一些其他控制項,使用非常方便,直接上源碼:
MainActivity:
package com.home.testpulltorefresh;import java.util.ArrayList;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.text.format.DateUtils;import android.widget.ArrayAdapter;import android.widget.ListView;import com.handmark.pulltorefresh.library.ILoadingLayout;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;import com.handmark.pulltorefresh.library.PullToRefreshListView;import com.home.testpulltorefreshlistview.R;public class MainActivity extends Activity {// 清單控制項private PullToRefreshListView mListView;// 資料集合private ArrayList<String> items = new ArrayList<String>();private int start = 0;// 適配器private ArrayAdapter<String> adapter;private static int refreshCnt = 0;@SuppressLint("HandlerLeak")private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:setAdatapter();mListView.onRefreshComplete();break;default:break;}};};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initView();geneItems();}/** * 設定適配器 */private void setAdatapter() {if (adapter == null) {adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items);mListView.setAdapter(adapter);} else {adapter.notifyDataSetChanged();}}/** * 初始化頁面控制項 */private void initView() {mListView = (PullToRefreshListView) findViewById(R.id.main_lv);// 設定模式mListView.setMode(Mode.BOTH);// 同時支援上拉下拉// mListView.setMode(Mode.PULL_FROM_END);// 只支援上拉Pulling Up// mListView.setMode(Mode.PULL_FROM_START);// 只支援下拉Pulling Down// 上拉下拉監聽器設定/* * 如果Mode設定成Mode.BOTH,監聽器需設定為OnRefreshListener2,並實現其onPullDownToRefresh、 * onPullUpToRefresh兩個方法 * 如果Mode設定為Mode.PULL_FROM_END或者Mode.PULL_FROM_START * ,監聽器可以設定為OnRefreshListener,並實現其onRefresh方法 * 監聽器也可以設定OnRefreshListener2, * Mode.PULL_FROM_START時觸發onPullDownToRefresh; * Mode.PULL_FROM_END觸發onPullUpToRefresh */// 設定OnRefreshListener2監聽器情況mListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {@Overridepublic void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {setUpdateTime(refreshView);refreshItems();}@Overridepublic void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {setUpdateTime(refreshView);geneItems();}});// 設定OnRefreshListener監聽器情況// mListView.setOnRefreshListener(new OnRefreshListener<ListView>() {//// @Override// public void onRefresh(PullToRefreshBase<ListView> refreshView) {// setUpdateTime(refreshView);// // 如果Mode設定為Mode.PULL_FROM_END,這裡執行載入更多商務邏輯// // 如果Mode設定為Mode.PULL_FROM_START,這裡執行重新整理商務邏輯// // geneItems();// refreshItems();// }//// });initListViewTipText();}/** * 初始化列表重新整理時的提示文本 */private void initListViewTipText() {// 設定上拉重新整理文本ILoadingLayout startLabels = mListView.getLoadingLayoutProxy(true,false);startLabels.setPullLabel("下拉重新整理...");startLabels.setReleaseLabel("放開立即重新整理...");startLabels.setRefreshingLabel("正在重新整理...");// 設定下拉重新整理文本ILoadingLayout endLabels = mListView.getLoadingLayoutProxy(false, true);endLabels.setPullLabel("上拉載入更多...");endLabels.setReleaseLabel("放開載入更多...");endLabels.setRefreshingLabel("正在載入...");}/** * 設定更新時間 * * @param refreshView */private void setUpdateTime(PullToRefreshBase<ListView> refreshView) {String label = DateUtils.formatDateTime(getApplicationContext(),System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME| DateUtils.FORMAT_SHOW_DATE| DateUtils.FORMAT_ABBREV_ALL);refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);}/** * 請求資料 */private void geneItems() {for (int i = 0; i != 5; ++i) {items.add("refresh cnt " + (++start));}handler.sendEmptyMessageDelayed(1, 2000);}/** * 重新整理資料 */private void refreshItems() {start = ++refreshCnt;items.clear();for (int i = 0; i != 5; ++i) {items.add("refresh cnt " + (++start));}handler.sendEmptyMessageDelayed(1, 2000);}}PullToRefreshListView還有一些其他功能和監聽器,這裡就不一一介紹了。