【PullToRefresh 系列一】 Android上拉加载下拉刷新控件详解

转载请注明:http://blog.csdn.net/duguang77/article/details/40921601

作者信息:

PullToRefresh控件下载地址:https://github.com/chrisbanes/Android-PullToRefresh

作者:https://github.com/chrisbanes

百度网盘下载地址:http://pan.baidu.com/s/1o6umifw

(一)导入方法:

1.下载后将extras,library,sample导入到Eclipse中

2.导入后时可能会报错,请更改依赖包位置

(二)使用方法:

我们一般用的比较多的就是单纯的ListView,

当然其他的情况比如GridView,WebView等等,作者也有直接写好的控件,大家直接用就好

下面我们看下使用的基本方法

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的模式
		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("松开加载更多...");

我的Demo工程所有代码

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);
		}
	}

}

Demo下载地址:http://pan.baidu.com/s/1c03tVVE

转载请注明:http://blog.csdn.net/duguang77/article/details/40921601

时间: 2024-10-06 06:35:22

【PullToRefresh 系列一】 Android上拉加载下拉刷新控件详解的相关文章

ListView上拉加载下拉刷新

主要用到了这个几个文件,MainActivity是界面的Activity,MyAdapter是ListView的自定义适配,MyListView是自定义带头部LIistView,如果只需要上拉加载就不需要:activity_main.xml是住界面,item.xml是ListView的子布局里面只有一个TextView,listview_footer.xml是listview的加载更多的底部布局,listview_header.xml是listview的头部布局. MainActivity.ja

XML解析及上拉加载下拉刷新

XML解析及上拉加载下拉刷新 1.XML格式 2.GData和XPath遍历 //配置XML库(配置完才能使用) //(1)添加头文件搜索路径 // Header Search Paths-> /usr/include/libxml2 //(2)添加二进制库 // Link library -> lixml2.dylib //(3)源文件添加编译选项 // -fno-objc-arc //(4)添加头文件 // #import "GDataXMLNode.h"*/ XPat

使用dragloader.js插件实现上拉加载/下拉刷新..

在写代码时候有个需求是,在触屏页面,为了加快页面加载速度,案件列表每页展示5条数据: 然后点击更多,展示下一页数据: 但是为了触屏更好的体验,改为往上滑动案件列表,加载下一页数据:就是要实现上拉加载/下拉刷新的效果: 我只用到了 上拉加载: 参考资料:http://blog.csdn.net/xb12369/article/details/39202711 下面是写的demo: html代码: <!DOCTYPE html> <html lang="en"> &

Mint-ui中loadmore(上拉加载下拉刷新)组件在ios中滑动会触发点击事件的解决方法

bug说明: Mint-ui中loadmore(上拉加载下拉刷新)组件 在 使用fastclick的情况下 ,在ios设备中滑动会触发点击事件: 解决方法: 我是按需引入,去项目中找到loadmore下的index.js,全部引入的要找mint下面mint-ui.common.js 路径如下:你的项目名/node_modules\mint-ui\lib\loadmore\index.js 搜索 handleTouchEnd ,记得写event进去 handleTouchEnd: function

微信小程序上拉加载下拉刷新

微信小程序实现上拉加载下拉刷新 使用小程序默认提供方法. (1). 在xxx.json 中开启下拉刷新,需要设置backgroundColor,或者是backgroundTextStyle ,因为加载的动画可能会是白色背景,会看不清. { "usingComponents": { "annicate": "/components/annicate/index" }, "navigationBarTitleText": &quo

移动端上拉加载下拉刷新

<template> <div class="wrapper" ref="wrapper"> <div class="content" > <div class="refresh" :class="{ativeRefresh:refresh}">刷新</div> <div class="ct-row" v-for=&quo

xlistview上拉加载 下拉刷新

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >

RecyclerView 上拉加载下拉刷新

<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_swipe" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_r

XListView实现上拉加载下拉刷新

package com.loaderman.androiddemo; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.animation