• android ListView下拉刷新 上拉加载更多


    背景

    最近在公司的项目中要使用到ListView的下拉刷新和上拉加载更多(貌似现在是个项目就有这个功能!哈哈),其实这个东西GitHub上很多,但是我感觉那些框架太大,而且我这个项目只用到了ListView没有用到其他的,所以我就想自己写一个吧!
    (注:本篇文章高手就自动略过吧!!!!)

    一.实现步骤

    1. 自定义View继承ListView
    2. 向ListView添加头部View和尾部View(还有人不知道吗?哈哈)
    3. 隐藏头部View和尾部View (这个地方有个坑,我在代码介绍的时候会注明)
    4. 重写onTouchEvent()方法 (这个地方注意点很多 要不然运行的时候 会出现很多细节上的问题)

    二.代码实现

    终于到了写代码的时候啦!!我们按照上面的步骤一步一步的来

    1.自定义View继承ListView 同时也要继承 AbsListView.OnScrollListener 因为要我们要记录ListView的状态.上代码:

    代码

    2.向ListView添加头部View和尾部View 这里如果直接调用view的getMeasuredHeight()方法来获取view的高度的话,你就会发这个这个高度值为0,所以我们在调用之前应该先执行下面段代码:

    代码

    得到view高度之后 就可以获取到头部View和尾部view的高度啦!在看代码:

    代码

    3.隐藏头部View和尾部View 这一步在第二部的代码片段中已经实现啦!就是设置两个View的paddingTop值 注意是负的啊 要不然不能隐藏哦!

    4.重写onTouchEvent()方法 重头戏来啦!

    1.首先我们再来分析一下 下拉刷新的过程:

    (1).用户没有任何操作

    (2).用户在在下拉

    (3).下拉一定距离 提示用户松开刷新

    (4).正在刷新

    (5).刷新完成-->(1)

    至此我们知道了总共用四中状态!我们可以用四个静态常亮来表示。当然,我们也因该定义个变量表示当前的状态 默认当然是无状态啦!!!看代码:

    代码

    1. 分析完状态之后,我们还需注意几点小问题:就是我们在什么时候才能下拉刷新呢?(大家好好想想!!) 就是当前页面中出现我们ites中的第一个(就是ListView显示列表中的第一个),此时下来才是有效的!!那怎么才知道当前页面中的第一个是ListView列表中的第一个呢?其实很简单 在继承ListView的时候我们继承了AbsListView.OnScrollListener这个回调接口!该接口有两个!我们先看其中一个回调方法

    代码

    代码中注释很清楚 我就不说明了!!

    3.至此,我们就要开始写最核心的部分了(请大家睁大双眼)
    (1).首先我们的第一步操作就是按下屏幕 此时当然触发Acion_Down啦。此时就是我们判断当前页面的第一个是否是ListView列表中的第一个啦 如果是的 我们设置个标志位记录下。同时呢 我们也得记录下按下去的X Y值。看代码

    代码
    (2).下面就是开始向下滑动了 这里我直接上代码(有注释 不要担心看不懂。如果看不懂就多看几遍!!哈哈)
    代码略长分了两段上传:

    代码
    代码

    仔细的看的人可以能要问了。这两个函数setHeaderViewTopPadding()和updateHeadView()是什么鬼!其实看名字就知道啦!第一个是用来更新view的paddingtop值的!第二个是用来更新View的内容的!
    4.最后一步啦 当用户松开手指的时候:其实很好判断 :无非就是判断当前状态是什么 如果是 PULLTOREALSE 松开就是刷新 不是的话就恢复出事状态。看代码:

    代码

    至此 本篇博客就要结束啦!可以有人要说了你骗人 !还有上拉加载更多呢?其实这个比下拉刷新简单的太多了!我就不贴代码了!!!大家自己去摸索吧!!
    附上代码下载链接

    代码

  • 相关阅读:
    ResourceManager总体架构
    Yarn聚合日志
    Hive参数配置方法
    Hive任务日志及日志调试
    bugku web web3
    bugku web 矛盾
    bugku web web基础
    Bugku 杂项 眼见非实
    Bugku 杂项 啊哒
    JarvisOJ Basic Help!!
  • 原文地址:https://www.cnblogs.com/likeandroid/p/4445455.html
Copyright © 2020-2023  润新知