PullToRefreshListView的简单使用

来源:互联网 发布:行政管理工商管理知乎 编辑:程序博客网 时间:2024/05/16 19:20

在前面介绍过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还有一些其他功能和监听器,这里就不一一介绍了。


main.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <com.handmark.pulltorefresh.library.PullToRefreshListView        android:id="@+id/main_lv"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:cacheColorHint="#00000000"        android:fadingEdge="none"        android:fastScrollEnabled="false"        android:footerDividersEnabled="false"        android:headerDividersEnabled="false"        android:smoothScrollbar="true" /></LinearLayout>

源码下载:http://download.csdn.net/detail/u010142437/8817137

0 0