Android中ListView上拉加载更多及下拉刷新

做几乎每一个Android应用开发,都少不了用到一个控件,那就是ListView,用于加载多条数据,并用一定的样式展示出来。但是为了性能问题(一次性加载太多数据,比如100000条,耗费时间长,消耗资源多等)及用户体验问题(比如用户只想看最新的10条数据,结果一下子把所有的上万条数据都加载了,不方便用户选择)等原因,所以我们要把ListView的数据进行分页加载,常用的就是ListView的上拉加载更多及下拉刷新最新数据。

我们可以自己封装一个带上下拉功能的ListView,通常就是加上头部HeaderView和底部FooterView,然后通过显示的数据条数与总数据条数据判断是否可以上拉,再用相应的监听来实现上下拉刷新操作,这些网上有大把资料。今天贴的代码是在工作中用到的,已经有开源库封装好的开源控件PullToRefreshListView。其实源码下载地址是:https://github.com/chrisbanes/Android-PullToRefresh ,详细用法可以点击查看。

PullToRefreshListView的用法很简单,同ListView是一样的,要给其提供数据的适配器Adapter,然后setAdapter()以及点击事件都是一样的。我把我在工作中用到的上下拉刷新实现代码简单贴出来,做个笔记:

privatePullToRefreshListView freshListView;

privateBeforeRecordAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.......);

freshListView= (PullToRefreshListView) findViewById(R.id.period_record_lv);//所在页面布局文件中对应PullToRefreshListView

freshListView.setMode(Mode.BOTH);//模式为上下拉

/*

* Mode.BOTH:同时支持上拉下拉

*Mode.PULL_FROM_START:只支持下拉Pulling Down

*Mode.PULL_FROM_END:只支持上拉Pulling Up

* 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现                     onPullDownToRefresh()、onPullUpToRefresh()两个方法。

* 如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。

* 当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,

* Mode.PULL_FROM的时候只调用onPullUpToRefresh()方法.

*/

freshListView.setOnRefreshListener(newOnRefreshListener2<ListView>() {

@Override

public voidonPullDownToRefresh(PullToRefreshBase<ListView> arg0) {

//下拉刷新实现

CURRENT_PAGE= 1;//分页加载,下拉刷新的都是第1页的数据

getData();//从服务器取数据

}

@Override

public voidonPullUpToRefresh(PullToRefreshBase<ListView> arg0) {

//上拉加载更多

CURRENT_PAGE++;//分页加载,上拉加载下一页面数据

getData();//从服务器取数据

}

});

adapter = new BeforeRecordAdapter(this);//适配器

freshListView.setAdapter(adapter);//设置数据

freshListView.setOnItemClickListener(beforeItemClick);//item点击事件

}

//加载服务器数据,或是自己构造数据

privatevoid  getData(){

//首先是获取到请求的数据,计算出数据的数量totalSize

//然后根据totalSize来判断freshListView应该处理哪种模式,比如数据加载完了就不能再上拉刷新

if(totalSize == 0) {

freshListView.setMode(Mode.DISABLED);

} else if (adapter.getCount() >= totalSize) {

freshListView.setMode(Mode.PULL_FROM_START);

} else {

freshListView.setMode(Mode.BOTH);

}

freshListView.onRefreshComplete();

}

这样就可以简单地实现上下拉功能,当然如果原来的刷新或加载样式不满意,可以自己改写就可以啦!

时间: 2024-08-10 12:19:50

Android中ListView上拉加载更多及下拉刷新的相关文章

Android中自定义ListView实现上拉加载更多和下拉刷新

ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,GitHub上有一些开源库可以使用,但是本着学习的精神,我做的是使用自定义ListView实现这个功能. 思路:谷歌提供的ListView是不能提供下拉刷新和下拉加载的,所以我们就需要重写ListView.在ListView的头部和尾部加上我们的布局文件(progressbar). 先说上拉加载更多实现

移动端touch事件 || 上拉加载更多

前言: 说多了都是泪,在进行项目开发时,在上拉加载更多实现分页效果的问题上,由于当时开发任务紧急,所以就百度找了各种移动端的上拉下拉 实现加载更多的插件.然后就留下了个坑:上拉加载的时候会由于用户错误的姿势,例如长按后再touchmove等会出现卡死的假象.(ps:当然, 我不认为是插件的问题,当时的想法是觉得引用的插件存在冲突),于是,我就直接通过封装touch事件完成上拉加载实现分页的功能. 备注:文章最后会加上为实现这个功能我找的一些插件 了解touch事件 在应用touch事件实现上拉加

Andorid上拉加载更多的几种实现方式

1.前言 Andriod中上拉加载更多的效果随处可见,因为一次性要展现的数据太多信息量太大的话,给用户的体验就很差(加载慢,界面卡顿.流量消耗大等),而加载更多可以控制每次加载条目的数量以达到快速加载,底部加载更多的方式就显得更人性化,今天就把用过的几种方式总结一下. 2.上拉加载更多的实现方式 ListView控件;作为一种传统列表展现的方式,ListView控件的addHeaderView(...).addFooterView(...)方法很方便的支持头布局.脚布局,参数就是打气筒打出来的布

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

android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)

Android实现上拉加载更多功能以及下拉刷新功能, 采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库. 目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等. 下载地址:https://github.com/chrisbanes/Android-PullToRefresh 首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述. 下面是个例子采用的是ListView,当然其余的和这

Android上拉加载更多ListView——PulmListView

思路 今天带大家实现一个上拉加载更多的ListView.GitHub传送门:PulmListView, 欢迎大家fork&&star. 先带大家理一下思路, 如果我们要实现一个上拉加载更多的ListView, 我们需要实现的功能包括: 一个自定义的ListView, 并且该ListView能够判断当前是否已经处于最底部. 一个自定义的FooterView, 用于在ListView加载更多的过程中进行UI展示. 关联FooterView和ListView, 包括加载时机判断.FooterVi

让Android Support V4中的SwipeRefreshLayout支持上拉加载更多

前言 原来的Android SDK中并没有下拉刷新组件,但是这个组件确实绝大多数APP必备的一个部件.好在google在v4包中出了一个SwipeRefreshLayout,但是这个组件只支持下拉刷新,不支持上拉加载更多的操作.因此,我们就来简单的扩展一下这个组件以实现上拉下载的目的. 基本原理 上拉加载或者说滚动到底部时自动加载,都是通过判断是否滚动到了ListView或者其他View的底部,然后触发相应的操作,这里我们以ListView来说明.因此我们需要在监听ListView的滚动事件,当

Android MVP设计框架模板 之 漂亮ListView上拉刷新下拉加载更多

mvp的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理.MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller. 项目中大部分是面对接口编程,通过P层可以预先将所有需要的接口功能

Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向

很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷新和上拉加载更多.这个组件有个mode的属性,可以设置为both,即上下同时都可拉动.但是只设置这个属性的话,上拉与下拉产生的效果是完全一致的.所以要使用这个开源项目做到下拉刷新并同时可上拉加载更多,就需要在代码中进行一些处理. ==========================pulltoref