PullToRefreshListView的简单使用

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

在前面介绍过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;
			}
		};

	};

	@Override
	protected 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>() {
			@Override
			public void onPullDownToRefresh(
					PullToRefreshBase<ListView> refreshView) {
				setUpdateTime(refreshView);
				refreshItems();
			}

			@Override
			public 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,那我接下来讲解一下如何使用 `PullToRefreshlibrary` 框架。 1. 在 `XML` 文件中添加 `PullToRefresh` 控件: ```xml <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_to_refresh_list_view" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </com.handmark.pulltorefresh.library.PullToRefreshListView> ``` 2. 在 `Java` 代码中初始化 `PullToRefresh` 控件: ```java PullToRefreshListView pullToRefreshListView = findViewById(R.id.pull_to_refresh_list_view); ListView listView = pullToRefreshListView.getRefreshableView(); // 设置刷新监听器 pullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { // 执行刷新操作 new GetDataTask().execute(); } }); // 设置加载更多监听器 pullToRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() { @Override public void onLastItemVisible() { // 执行加载更多操作 new GetDataTask().execute(); } }); ``` 3. 实现刷新和加载更多的操作: ```java private class GetDataTask extends AsyncTask<Void, Void, List<String>> { @Override protected List<String> doInBackground(Void... params) { // 执行网络请求或其他耗时操作,返回数据列表 List<String> data = new ArrayList<>(); // ... return data; } @Override protected void onPostExecute(List<String> data) { // 刷新或加载更多完毕后,更新列表数据并结束刷新状态 if (isRefreshing) { adapter.setData(data); pullToRefreshListView.onRefreshComplete(); isRefreshing = false; } else { adapter.addData(data); pullToRefreshListView.onRefreshComplete(); } } } ``` 以上就是使用 `PullToRefreshlibrary` 框架的基本步骤,您可以根据自己的实际需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值