`
南瓜猿
  • 浏览: 45105 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
社区版块
存档分类
最新评论

Android之ListView下拉刷新和上拉加载实现详解(含源码Demo)

阅读更多

之前有一段时间没写博客了,忙课程设计用了一周,搞其他有的没的也浪费了很多时间..

惭愧惭愧..这两天整理了一下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实现下拉刷新的源代码,上拉加载同理可实现。

 

 

1
2
分享到:
评论

相关推荐

    Android ListView 下拉刷新、上拉加载

    4. 性能优化:对于大数据量的列表,可以使用ViewHolder模式减少视图复用的开销,或者使用ListView的HeaderView和FooterView来实现下拉刷新和上拉加载的界面。 总结,下拉刷新和上拉加载是Android应用中常见的功能,...

    Android中ListView下拉刷新和上拉加载更多的实现

    总之,Android中的ListView下拉刷新和上拉加载更多是提高用户交互体验的重要功能。通过SwipeRefreshLayout和自定义Adapter,开发者可以轻松地将这些功能集成到自己的应用程序中。理解并熟练掌握这两项技术对于...

    Android应用源码 ListView下拉刷新 Demo

    在Android开发中,ListView是一种常用的组件,用于展示...通过分析和理解这个"Android应用源码 ListView下拉刷新 Demo",开发者能够更好地掌握在实际项目中实现ListView下拉刷新的方法,提高应用的交互性和用户体验。

    完美的ListView下拉刷新上拉加载实例Demo

    "完美的ListView下拉刷新上拉加载实例Demo"就是一个这样的示例项目,它旨在帮助开发者理解和实现这种交互模式。 下拉刷新(Pull-to-Refresh)功能允许用户通过在ListView顶部向下拉动来更新列表内容,通常用于获取...

    android 下拉刷新 上拉加载 listview 实现demo

    在Android开发中,下拉刷新和上拉加载是常见的用户交互功能,特别是在列表视图(ListView)中。这种设计能够提升用户体验,使用户无需离开当前界面就能获取更多数据。本教程将详细介绍如何在Android中实现这样的功能。...

    Android Listview下拉刷新上拉加载源码

    "Android Listview下拉刷新上拉加载源码"这个资源可能包含了实现这些功能的具体代码示例。 下拉刷新功能允许用户通过手势向下拉动ListView的顶部来更新列表内容,通常用于获取最新数据。这种功能的实现通常依赖于第...

    自定义listview下拉刷新上拉加载更多以及与google官方的下拉刷新结合使用

    在Android开发中,ListView是常用的数据展示控件,但原生的ListView并不支持下拉刷新和上拉加载更多的功能。为了实现这些高级特性,开发者通常需要进行自定义或者使用第三方库。本教程将探讨如何自定义ListView实现...

    android listView下拉刷新 上拉加载 分开

    标题提到的"android listView下拉刷新 上拉加载 分开",意味着它提供了三个独立的示例,分别针对下拉刷新和上拉加载功能进行实现。下面我们将详细探讨这些知识点。 1. **下拉刷新(Pull-to-Refresh)** 下拉刷新功能...

    Android ListView下拉刷新 Demo.rar

    本Demo "Android ListView下拉刷新 Demo.rar" 主要是为了展示如何在ListView中实现下拉刷新功能,帮助开发者更好地理解和实践这一功能。 首先,我们要理解下拉刷新的基本概念。下拉刷新,顾名思义,是指用户在...

    自定义ListView实现下拉刷新+加载更多功能Demo

    在Android开发中,自定义ListView实现下拉刷新和加载更多的功能是常见的需求,尤其是在构建具有数据流滚动和实时更新的应用程序时。这个"自定义ListView实现下拉刷新+加载更多功能Demo"旨在帮助开发者理解如何集成...

    android下拉刷新+上拉加载+滑动删除的ListView

    为了提升用户体验,开发者经常需要在ListView中实现下拉刷新、上拉加载和滑动删除等功能。本篇将详细讲解如何在Android中实现这些特性。 下拉刷新(Pull-to-Refresh)功能允许用户通过向下拉动列表来获取最新数据。...

    安卓下拉上拉刷新相关-ListView下拉刷新上拉自动加载demo.zip

    本示例代码"安卓下拉上拉刷新相关-ListView下拉刷新上拉自动加载demo.zip"主要探讨了如何在ListView中实现这一功能。 首先,"下拉刷新"是指用户在ListView顶部向下拉动时,触发刷新操作,通常会显示一个刷新进度条...

    Android 自定义ListView(下拉刷新PullToRefreshListView 上拉加载LoadListView)

    Android 自定义ListView,分别实现下拉刷新的ListView及上拉加载的ListView 详情可以参考我的博客 http://blog.csdn.net/sunshanai/article/details/51622917

    Android ListView下拉刷新上拉自动加载更多DEMO示例

    总的来说,实现Android ListView的下拉刷新和上拉加载更多功能,需要对触摸事件处理、视图状态管理以及数据加载回调有深入理解。而随着技术的发展,开发者应考虑使用`RecyclerView`来替代`ListView`,并结合现有的...

    再也不用担心下拉刷新,上拉加载啦!-自定义ListView对上拉刷新,上拉加载的详解

    要实现自定义ListView的下拉刷新和上拉加载,我们通常会使用SwipeRefreshLayout和LinearLayoutManager这两个组件。SwipeRefreshLayout是Android提供的一个用于添加下拉刷新功能的容器,它可以包裹ListView或者...

    Android布局ListView下拉刷新demo

    在Android应用开发中,...通过研究这个"Android布局ListView下拉刷新demo",开发者不仅可以学习如何实现下拉刷新功能,还可以了解如何优化UI交互和处理数据加载。这对于提高Android应用的用户体验有着重要的实际意义。

    Android应用源码 ListView下拉刷新 Demo.zip

    在Android应用开发中,ListView是常用...通过深入研究和实践这个"Android应用源码 ListView下拉刷新 Demo"项目,开发者可以更好地理解和掌握如何在Android应用中实现在ListView上的下拉刷新功能,提升应用的用户体验。

    自定义listView下拉刷新上拉加载更多

    总结起来,自定义ListView下拉刷新和上拉加载更多是提升Android应用性能和用户体验的重要手段。通过自定义组件,开发者可以灵活地设计交互和视觉效果,更好地匹配应用的整体设计。理解并掌握这种自定义实现方法对于...

    Android listview 下拉刷新和下拉刷新及加载更多

    综上所述,Android ListView的下拉刷新和上拉加载更多功能是现代移动应用中不可或缺的组件,它们提升了用户体验,使得数据更新和加载更加便捷。开发者可以通过多种方式实现这些功能,但需要注意性能优化和用户体验的...

Global site tag (gtag.js) - Google Analytics