之前有一段时间没写博客了,忙课程设计用了一周,搞其他有的没的也浪费了很多时间..
惭愧惭愧..这两天整理了一下listview的下拉刷新和上拉加载的使用方法,自己做了一遍以后感觉受益良多,也慢慢积累了一些以前没有掌握的知识点。
本文分成两个部分:
1:采用PullToRefresh实现listview的下拉刷新和上拉加载
2:自定义listview实现下拉刷新和上拉记载
一:PullToRefresh实现
用到的是chrisbanes大神写的实现下拉刷新和上拉加载的类库PullToRefresh,目前支持的控件类型有listview,gridview,scrollview,viewpager,webview等我们经常接触到的控件。
下载地址:https://github.com/chrisbanes/Android-PullToRefresh
这里要注意导入过程:下好以后将Android-PullToRefresh-master类库包里的library包和你的项目导入在同一个workspace下,然后引入这个library包即可。
具体使用步骤比较简单,参考下列代码:
public class MainActivity extends ListActivity { private LinkedList<String> mItemList; private ArrayAdapter<String> adapter; private Context context; private PullToRefreshListView mPullToRefreshListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; initData(); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mItemList); //初始化控件 mPullToRefreshListView = (PullToRefreshListView)findViewById(R.id.pull_refresh_list); ListView mListView = mPullToRefreshListView.getRefreshableView(); mListView.setAdapter(adapter); //设置pull-to-refresh模式为Mode.Both mPullToRefreshListView.setMode(Mode.BOTH); //设置上拉下拉事件 mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(final PullToRefreshBase<ListView> refreshView) { if (refreshView.isHeaderShown()){ Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show(); //下拉刷新 业务代码 }else { Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show(); //上拉加载更多 业务代码 } refreshView.postDelayed(new Runnable() { @Override public void run() { refreshView.onRefreshComplete(); } }, 1000); Toast.makeText(context, "刷新成功",Toast.LENGTH_SHORT).show(); } }); } private void initData(){ //初始化数据 mItemList = new LinkedList<String>(); mItemList.addAll(Arrays.asList(data)); } private String[] data = new String[]{"data1","data2","data3","data4","data5","data6", "data1","data2","data3","data4","data5","data6"}; }
按步骤完成以后运行的程序在上拉加载和下拉刷新的时候是不会停止的,因为在onRefresh类里面还没有写具体的实现业务代码:
@Override public void onRefresh(final PullToRefreshBase<ListView> refreshView) { if (refreshView.isHeaderShown()){ Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show(); //下拉刷新 业务代码 }else { Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show(); //上拉加载更多 业务代码 }
这里为了能够方便测试,给其添加了测试代码,使用view的postDelayed()方法里实现定时停止操作,整个事件方法如下:
//设置上拉下拉事件 mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(final PullToRefreshBase<ListView> refreshView) { if (refreshView.isHeaderShown()){ Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show(); //下拉刷新 业务代码 }else { Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show(); //上拉加载更多 业务代码 } refreshView.postDelayed(new Runnable() { @Override public void run() { refreshView.onRefreshComplete(); } }, 1000); Toast.makeText(context, "刷新成功",Toast.LENGTH_SHORT).show(); } });
以上就是使用PullToRefresh实现上拉加载和下拉刷新的过程。当然我们在使用的时候也不能光是“拿来主义”,就像最近看过一句令人印象深刻的话:别人造的轮子虽然好,自己如果不跟着做一遍永远也造不出轮子。
二:自定义listview实现
具体的实现思路是:
1、自定义listview,自定义headerview,添加到自定义的listview中,设置headerview默认状态下隐藏不可见。
2、在自定义的listview中通过引入OnScrollListener接口,在重写的方法里判断当前listview滚动的页码并记录下来。
3、自定义一个onMove方法判断移动过程中的操作,获得当前用户操作状态的state。重写onTouchEvent()方法,判断用户的四种动作:MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP并做出相应操作(如果在listview第一页且listview被下拉到并且state的值为“释放下拉操作”时调用mainactivity的刷新方法进行刷新,从而实现功能。
这里要注意从自定义mainactivity调用activity的刷新方法是通过activity引入自定义的listview中定义的接口,在mainactivity初始化的时候通过将自身实例this传入这个自定义的listview,从而实现的。
个人觉得还有另外一种方法可以实现,在mainactivity里创建一个public的静态实例对象,然后在listview中引入这个对象调用mainactivity的刷新方法,我也不知道这两种方法哪种好用一点望有大神告知~!!
下面是自定义listview实现下拉刷新的源代码,上拉加载同理可实现。
相关推荐
NULL 博文链接:https://geningaixin.iteye.com/blog/2034379
ListView下拉刷新 ListView下拉刷新ListView下拉刷新ListView下拉刷新
Android Listview下拉刷新上拉加载源码
完美的ListView下拉刷新上拉加载实例Demo,已经测试完美运行
http://blog.csdn.net/qq_32673327/article/details/52012327 这是关于Demo实现的博客
android自定义listview控件 可实现下拉刷新、下拉加载更多的功能,代码比较简单,内有详细注释和实现方法,方便初学者学习
自定义ListView实现下拉刷新+加载更多功能Demo
Android下拉刷新+上拉加载+滑动删除的ListView,简单易用,快速集成到应用。
Android ListView下拉刷新 Demo.rar
Android 自定义ListView,分别实现下拉刷新的ListView及上拉加载的ListView 详情可以参考我的博客 http://blog.csdn.net/sunshanai/article/details/51622917
自定义listview下拉刷新上拉加载更多以及与google官方的下拉刷新结合使用
android 实现listview动态下拉刷新,动态加载数据 可以避免一次数据加载过多
android Listview下拉刷新 上拉(滑动分页)加载更多 高仿新浪微博下拉刷新,同时实现了滑动加载下一页
找下拉刷新,上拉加载的demo找了好久,踩找到这个相对完美的。所以分享给大家。 同时也将GitHub上的一个开源的下拉刷新,上拉加载的ListView稍稍改良了一下! 原始代码地址:...
里面有三个例子 是分开的 listView 的下拉刷新上拉加载,现在大多数的应用都用的这一款
Android studio 环境下自定义ListView ,实现下拉刷新数据,上拉加载数据
ListView下拉刷新上拉自动加载demo.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android Listview 单独的下拉刷新和 下拉刷新以及加载更多结合.
自定义listview下拉刷新与上拉加载更多方法,其中MyPulltoRefresh只包含下拉加载更多,MyPulltoRefresh22种都包含,选择需要的引入xml文件哦