ListView下拉刷新-程序员宅基地

技术标签: 下拉刷新  android  

以后会经常用到下拉刷新和上拉刷新的,今天用了,就记录一下,方便以后的使用。

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

1.导包

2.xml布局:

<LinearLayout 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" >

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
3.Activity中:

public class MainActivity extends Activity implements
		OnRefreshListener<ListView> {
	private MyHandler handler = new MyHandler();
	/** 从第三页开始显示吧 */
	private int current_head_index = 3;
	/** 后面是第三页开始 */
	private int current_foot_index = 4;
	private PullToRefreshListView mPullRefreshListView;
	/** 数据集合 */
	private ArrayList<String> data;
	/** 简单的适配器 */
	private ArrayAdapter<String> adapter;
	private boolean ishead = false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.listview);
		data = new ArrayList<String>();
		addData();
		adapter = new ArrayAdapter<String>(MainActivity.this,
				android.R.layout.simple_list_item_1, data);
		mPullRefreshListView.setOnRefreshListener(this);
		/** 上下都刷新 */
		mPullRefreshListView.setMode(Mode.BOTH);
		mPullRefreshListView.getLoadingLayoutProxy(false, true).setPullLabel(
				"下拉中");
		mPullRefreshListView.getLoadingLayoutProxy(false, true)
				.setRefreshingLabel("刷新中");
		mPullRefreshListView.getLoadingLayoutProxy(false, true)
				.setReleaseLabel("释放了");
		/** 需要listView */
		ListView actualListView = mPullRefreshListView.getRefreshableView();
		actualListView.setAdapter(adapter);
		actualListView.setOnScrollListener(new OnScrollListener() {

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				// TODO Auto-generated method stub
				/** 如果第一条看得见 就下拉刷新 */
				if (firstVisibleItem == 0) {
					ishead = true;
				} else {
					ishead = false;
				}
			}
		});
	}

	private void addData() {
		if (current_head_index >= 1) {
			if (ishead) {
				int tempIndex = current_head_index * 10;
				for (int i = tempIndex; i > tempIndex - 10; i--) {
					data.add(0, i + "");
				}
				current_head_index--;
			} else {
				int tempIndex = current_foot_index * 10;
				for (int i = tempIndex - 10; i < tempIndex; i++) {
					data.add(i + "");
				}
				current_foot_index++;
			}
		}
	}

	@Override
	public void onRefresh(PullToRefreshBase<ListView> refreshView) {
		// TODO Auto-generated method stub
		new MyThread().start();
	}

	private class MyThread extends Thread {

		@Override
		public void run() {
			// TODO Auto-generated method stub

			super.run();
			try {
				sleep(3000);
				/** 让主线程更新UI */
				Message msg = handler.obtainMessage();

				handler.sendMessage(msg);

			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	private class MyHandler extends Handler {
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);

			/** 更新数据 */
			addData();
			adapter.notifyDataSetChanged();
			mPullRefreshListView.onRefreshComplete();
		}
	}
}

记得以下几个点:

1.用一个变量来标志请求数据是上拉还是下拉(在listView的setOnScrollListener() 的监听器中来监听是下拉还是上拉,如果第一条看见了,肯定下拉,前提是第一次的条目要很多,使得第一条会滚出屏幕!!!)

2.上拉的话,数据记得加在0处,下拉就直接加在后面了

3.差点忘记了,那个ListView 是这样得到的

ListView actualListView = mPullRefreshListView.getRefreshableView();

4.记得

adapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();

5.明天还要做别的不知道能不能搞定呢??

项目和支持库下载地址:
http://download.csdn.net/detail/yymonkeydo/8121035

listView代码中配置:

//滚动条的宽度
istView.setScrollBarSize(3);
//滚动条的背景图片为空
listView.setDivider(null);
//条目之间的距离
listView.setDividerHeight(10);


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yymonkeydo/article/details/40791987

智能推荐

MFC对话框处理滚动条_对话框 onmousewheel-程序员宅基地

MFC对话框处理滚动条flyfish头文件//成员变量 //在资源视图中看到的对话框的大小 CRect m_rectOriginal; // 鼠标拖拽 BOOL m_bDragging; CPoint m_ptDragPoint; // 滚动条实际位置 int m_nScrollPos; // 对话框实际高度 i_对话框 onmousewheel

find find_if-程序员宅基地

find有三个参数前两个参数都是迭代器,咱们的查找范围也就是两个迭代器之间,第三个参数是要查找的数据,如果查找的是自定义的数据类型的话,那咱们还要对==进行重载,重载的格式为:bool operator ==(参数){函数体}find_if也有三个参数前两个参数都是迭代器,咱们的查找范围也就是两个迭代器之间,第三个是要查找的条件,比如数据元素要大于多少,参数的体现为函数名,bool mycompare(int a) {if (a > 5)return true;else{r

最通俗易懂的java(Dom4j xml解析)_dom4j解析xml中的括号-程序员宅基地

1.xml:是一种可扩展的标记语言,它也是由标签组成,不同的是它的标签名可以自定义.后缀名:.xml.2.xml作用:用来传输和存储数据。用来作为配置文件;用来跨平台进行数据交换格式.用来作为持久文件存数据.注意:xml和html都是标记语言,由标签组成.html专门作为前端页面展示,xml用来 作后台数据传输和存储.3.xml的组成(了解)3.1:xml标签规范:3.1.1:..._dom4j解析xml中的括号

IDEA不显示git版本控制以及vcs的配置_idea没有vcs选项_kkqq521l的博客-程序员宅基地

IDEA不显示git版本控制以及vcs的配置1 进入idea的preferences(setting)2 然后找到版本控制(version controller),如果上面一个git配置都没有,那肯定是不会有git提交的那几个按钮3 然后找到project,选择版本控制为git,如果有多个版本控制,在新建一个选其他就可以了 也可以设置这些版本控制..._idea没有vcs选项

详解HttpURLConnection-程序员宅基地

请求响应流程设置连接参数的方法setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches设置请求头或响应头HTTP请求允许一个key

漫画 | Kubernetes知识点-程序员宅基地

阅读本文大概需要 3 分钟。来源:UCloud云计算熟悉Kubernetes的程序员,都是最帅的人吧。在资源编排的宇宙里,有哪些秘密可以探索呢?这里以漫画的形式整理一份K...

随便推点

真值表 洛谷 P1328 生活大爆炸版石头剪刀布_两人进行剪刀石头布真值表-程序员宅基地

题目描述石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一 样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。现在,小 A和小 B尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规律的,但周期长度不一定相等。例如:如果小A以“石头-布-石头-剪刀-蜥蜴_两人进行剪刀石头布真值表

尝试制作网线_尝试制作一根网线-程序员宅基地

今天是我到西永重庆电子工程职业学院大学生IT培训机构参加培训的第一天,心里还是比较乐滋滋的,暑假就捐给培训机构了,感觉很值得,虽然不能象在学校那样自由,但是在这里我将会学到很多的知识。 一到机构,就面临一个问题,制作好的网线用完了,需要制作网线。之前我看过一点制作网线的书籍,没有人说会或者不会,我抱着试试,实践一下的态度接收了任务。好不容易费了九牛二虎之力接好两个水晶头,_尝试制作一根网线

27岁研究生毕业年龄大吗?_小白学视觉的博客-程序员宅基地

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文转自 | 深度学习与计算机视觉这是一篇在知乎获得150多万阅读量的话题,先看看具体问题,你是否..._27岁研究生毕业感觉没长大

51单片机——DS18B20温度传感器-1总线通讯1.1_温度传感器连接到同一总线_金丝草的博客-程序员宅基地

写的不知道好不好,有什么不对的地方还请指出,谢了。1、本节基于DS18B20 1总线通讯。DS18B20温度转换很慢,初始化复位也慢,读取它的温度不需要那么频繁,可按照需要修改。2、驱动DS18B20,代码3个:初始化DS18B20、写1字节、读1字节。3、在《51单片机——DS18B20温度传感器-1总线通讯1.0》章节上做代码优化了,主要解决了小数转换及显示问题。4、温度读取出来后用数码管来显示小数,上章节数码管显示小数有精度问题,本次直接优化OK,只是12位精度显示的时候最后面那位老是_温度传感器连接到同一总线

魔兽知名外挂开源-程序员宅基地

本着好东西共享给大家的原则,在这里本人将以连载的形式把两款热销于魔兽世界的内挂——“魔兽好用”“魔兽超人”“魔兽魔方”开源。仅供大家学习和交流之用。虽然这些资料能让不懂外挂的朋友了解一些外挂的知识,能让热衷于外挂的朋友们找到一些思路和方法的借鉴,能给做游戏开发、游戏安全的朋友们更多的反外挂的线索从而把游戏做得更安全、更好;但我公开这些资料的主要目的是:希望所有热衷于网络游戏的朋友们能正确认识游戏..._魔兽世界sf用的挂

cmd输入maven命令行报错JAVA_HOME should point to a JDK not a JRE-程序员宅基地

在mavem目录bin目录下找到mvn.cmd文件使用记事本打开在文件第一行输入set JAVA_HOME=D:\Java\jdk1.8.0_101(此处为你的Jdk所在)