ListView的下拉刷新+上拉加载(已有demo)

1、XListView因为添加了Header,会导致存储的数据+1,所以赋值时需要position-1。补充:当去掉HeaderView时,position不用-1。

2、提个建议:上拉加载更多,最好在onCreate()中就执行setAdapter,然后不论是空数据、还是有数据,只用更新适配器就行了。

一、XListView
2、用法

导入图中的me.maxwin.view包

提供了两个接口:

IXListViewListener:触发下拉刷新,上拉加载更多。实现此接口时,onLoadMore()用来上拉加载更多,onRefresh()用来下拉刷新。

OnXScrollListener:和原生的OnScrollListener一样,但是在header/footer回滚时也会触发。

几个常用方法:

setPullRefreshEnable(boolean enable):是否允许下拉刷新

setPullLoadEnable(boolean enable):是否允许上拉加载更多

stopRefresh():停止刷新,重置header view

stopLoadMore():停止加载更多,重置footer view

请求到数据后停止刷新停止加载更多。

setRefreshTime(String time):设置上次刷新的时间

onLoadMore():加载更多时调用的方法。注意第一次进入时不会调用此方法。

onRefresh():下拉刷新时调用的方法。

3、代码中怎么体现

1)实现IXListViewListener接口->2)实现上拉刷新和下拉加载更多的数据变更->3)更新header view和footer view,并设置更新时间。

[java] view plaincopy

  1. //1、实现IXListViewListener接口
  2. mListView.setXListViewListener(this);
  3. //2.1  onRefresh中实现下拉刷新的数据加载
  4. @Override
  5. public void onRefresh() {
  6. //请求数据

//更新界面显示


[java] view plaincopy

  1. onLoad();

}//2.2 onLoadMore中实现上拉加载更多的数据加载

[java] view plaincopy

  1. @Override
  2. public void onLoadMore() {
  3. //请求数据

//更新界面显示


[java] view plaincopy

  1. onLoad();

}//3、加载完数据后,复位header view和footer view,并设置更新的时间。

[java] view plaincopy

  1. private void onLoad() {
  2. mListView.stopRefresh();mListView.stopLoadMore();
  3. mListView.setRefreshTime("刚刚");
  4. }
4、xml注意事项

当将XListView嵌入到LinearLayout中时,XListView占满全屏时不能再加载更多。上错误代码:

[java] view plaincopy

  1. <LinearLayout
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content"
  4. android:layout_above="@id/takemain_ll"
  5. android:layout_below="@id/takemain_l"
  6. android:orientation="vertical" >
  7. <cn.bestbang.durable_consumer_goods.utils.MyExXListView
  8. android:id="@+id/home_list"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent" >
  11. </cn.bestbang.durable_consumer_goods.utils.MyExXListView>
  12. </LinearLayout>
5、去ScrollView共用

这种情况,重写XListView会导致上拉加载时频繁的报错:适配器未更新,不知道咋解决。


二、PullToRefresh

大部分内容转自鸿洋的博客:http://blog.csdn.net/lmj623565791/article/details/38238749

1、整体了解:

首先,github上的这个控件:pull-to-refresh,例子中的功能非常强大,可不止支持ListView和GridView。在下载前,先说下项目结构。github上下载的例子,是依赖于三个项目的,一个基本的library_pullToRefresh(自己要引用到的项目。怎么引用?自己的项目右键->Properties->Android,在Is Library中选择路径),一个基本的PullToRefreshViewPager,一个PullToRefreshListFragment。

2、用法

1)设置PullToRefreshListView支持上拉加载和下拉刷新->2)初始化控件,设置适配器->3)设置监听事件。在监听事件中处理上拉加载更多和下拉刷新,设置最后更新的时间。

[java] view plaincopy

  1. <pre name="code" class="java"><pre name="code" class="java">//1、支持上拉加载和下拉刷新

mPullRefreshListView.setMode(Mode.BOTH);


//2、设置适配器 mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems); mPullRefreshListView.setAdapter(mAdapter); //3、设置监听器mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>(){ @Override public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView){ // 显示最后更新的时间 refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); //这里写下拉刷新的任务 new GetDataTask().execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView){ // 显示最后更新的时间 refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);

[java] view plaincopy

  1. //这里写上拉加载更多的任务

new GetDataTask().execute(); } });


3、属性介绍

1)ptr:ptrMode="both"支持上拉加载和下拉刷新。disabled禁用下拉刷新和上拉加载。pullFromEnd仅支持上拉加载。manualOnly只允许手动触发。当然通过代码也可设置:lv.setMode(Mode.BOTH);

2)ptr:trAnimationStyle="flip"          flip:翻转动画;rotate:旋转动画。

3)ptr:ptrDrawable="@drawable/ic_launcher"设置图标

4)ptrScrollingWhileRefreshingEnabled刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好。5)ptrListViewExtrasEnabled 决定了Header,Footer以何种方式加入mPullRefreshListView,true为headView方式加入,就是滚动时刷新头部会一起滚动。

4、自定义下拉指示器文本内容等效果:

在初始化完成PullToRefreshListView后,通过lv.getLoadingLayoutProxy()可得到一个ILoadingLayout对象,这个对象可设置各种指示器中的样式、文本等。

[java] view plaincopy

  1. ILoadingLayout startLabels = mPullRefreshListView
  2. .getLoadingLayoutProxy();
  3. startLabels.setPullLabel("你可劲拉,拉...");// 刚下拉时,显示的提示
  4. startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时
  5. startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示

默认是上拉和下拉的字同时改变的,如果希望单独改变呢:

[java] view plaincopy

  1. private void initIndicator(){
  2. ILoadingLayout startLabels = mPullRefreshListView
  3. .getLoadingLayoutProxy(true, false);
  4. startLabels.setPullLabel("你可劲拉,拉...");// 刚下拉时,显示的提示
  5. startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时
  6. startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示
  7. ILoadingLayout endLabels = mPullRefreshListView.getLoadingLayoutProxy(
  8. false, true);
  9. endLabels.setPullLabel("你可劲拉,拉2...");// 刚下拉时,显示的提示
  10. endLabels.setRefreshingLabel("好嘞,正在刷新2...");// 刷新时
  11. endLabels.setReleaseLabel("你敢放,我就敢刷新2...");// 下来达到一定距离时,显示的提示
  12. }

版权声明:

时间: 2024-10-12 09:32:54

ListView的下拉刷新+上拉加载(已有demo)的相关文章

最新Android ListView 下拉刷新 上滑加载

开发项目过程中基本都会用到listView的下拉刷新和上滑加载更多,之前大家最常用的应该是pull to refresh或它的变种版吧,google官方在最新的android.support.v4包中增加了一个新类SwipeRefreshLayout,地址 这个类的作用就是提供官方的下拉刷新,并且效果相当不错,而上拉加载更多则用我们自定义的listview,也是相当简单. 下拉刷新 简单的介绍下: 首先它是一个viewgroup,但是它只允许有一个子控件,子控件能是任何view,使用的时候,所在

十分钟实现ListView下拉刷新上滑加载更多

说到ListView下拉刷新几乎每个APP都会用到,所以ListView下拉刷新是很重要的,就像ListView优化一样是你必会的东西. ListView实现下拉刷新如果我们开发人员自己编写相对来说比较费事的,当我们使用第三方库之后我们再来开发这个功能就会省事很多.相比与自己实现可以少编写不少代码,Android-PullToRefresh库可以轻松实现ListView的下拉刷新功能. 要使用Android—PullToRefesh库对ListView实现下拉刷新要经过以下几个步骤: 1.下载A

Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView

在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/details/78781682 ,这里是看了之后,结合自己实际遇到的问题写的. 首先引入包. //下拉框 implementation 'com.android.support:recyclerview-v7:28.0.0-beta01' implementation 'com.scwang.smar

android 安卓 listview 支持下拉刷新 上拉加载更多

[1]重写listView import java.text.SimpleDateFormat; import java.util.Date; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGrou

ListView的下拉刷新上拉加载以及带列的横向滚动

相信有很人做的项目估计都用的到这个.就是ListView的下拉刷新上拉加载还有就是列的横向滚动; PS:横向滚动带表头与固定列(相信蛮多人都有这样的需求吧?就是在ListView上支持很多列,然而设备屏幕宽度有限) PS:这是我个人在网上找的两个示例demo结合而成的一个示例demo,还可以继续拓展,后续有时间就会更新,大家互相学习 ListView下拉刷新上拉加载示例demo原文出处: http://blog.csdn.net/limb99/article/details/18901513 L

重写ListView实现下拉刷新上拉加载

安卓本身的ListView没有刷新功能,要想实现这一功能,就得继承ListView并重写它的方法.同时也要实现其OnScrollListener这一接口. 下拉刷新,需要在原本的ListView上部添加一个Head,ListView本身提供了addHeadView()这一方法,但是没有实现刷新的功能,我们可以自定义Head的内容,并加上刷新的功能. 上拉加载更多数据与下拉刷新类似,是在ListView的下部添加一个Footer.具体实现代码如下: import java.text.SimpleD

带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载

转载请注明出处:http://blog.csdn.net/lowprofile_coding/article/details/51321896 一 .前言 最近实在太忙,一个多礼拜没有更新文章了,于是今晚加班加点把demo写出来,现在都12点了才开始写文章. 1.我们的目标 把RecyclerView下拉刷新上拉加载更多加入到我们的开发者头条APP中. 2.效果图 3.实现步骤 找一个带上拉刷新下载加载更多的RecyclerView开源库,我们要站在巨人的肩膀上 下载下来自己先运行下demo,然

Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)

转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉加载,网上的Demo太多太多了,这里不是介绍怎么去实现下拉刷新上拉加载,而是针对下拉刷新上拉加载常用的一些应用场景就行了一些总结,包含了下拉刷新上拉加载过程中遇到的一些手势冲突问题的解决方法(只能算是抛砖引玉). 去年9月的时候,那时自己正在独立做Android项目.记得刚刚写完那个ListView列表页面(木有下拉刷新,上拉加载)

Android 下拉刷新上拉加载效果功能,使用开源项目android-pulltorefresh实现

应用场景: 在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好.方便的用户体验,以滑动.下拉的效果动态加载数据的要求就会出现.为此,该效果功能就需要应用到所需要的展示页面中. 知识点介绍: 本文主要根据开源项目android-pulltorefresh展开介绍. android-pulltorefresh [一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.G