android 下拉刷新listview

发表于:,更新于:,By Sally
大纲
  1. 1. 知识点
    1. 1.1. 控件的方法
    2. 1.2. 数据查询
    3. 1.3. 接口
  2. 2. 思路
    1. 2.1. 需要两个布局文件view
    2. 2.2. 初始化
    3. 2.3. 逻辑处理
    4. 2.4. 逻辑处理中的判断

知识点

控件的方法

  • addHeaderView() 这个方法必须在setAdapter() 方法之前调用。

  • 在隐藏控件的时候,除了可以使用invisiblei() 之外,将控件的paddingTop()设置为控件高度的负值也可以隐藏

  • getHeight() 和 getMeasuredHeight() 两个获取控件高度的区别

    • getMeasuredHeight() : 获取测量完的高度,只要onMeasure()方法执行完,就可以获得它的宽高。在自定义控件中多使用该方法获得控件宽高。

      注意:要在view.measure(0,0)方法后使用,使用view.measure(0,0)`方法可以通知系统去测量其宽高,参数为0,0

    • getHeight() : 必须在onLayout()方法执行完之后,才能获得宽高

      1
      2
      3
      4
      5
      6
      7
      8
      view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
      headerView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
      // 获得其宽高
      int headerViewHeight = headerView.getHeight();
      }
      });
  • 在listview中,有getFirstVisiblePosition() , getLastVisiblePosition(), getCount(), setSelection()(将对应的item放到屏幕顶端)等等好用的方法

数据查询

  • 分页加载数据, mysql: select * from TABLE limit (index - 1), count

  • index : 当前页 , count : 每页显示的总数

接口

  • 当定义一个功能,自己不实现,需要别人实现,并且可能每个人实现的方式不同,这时就需要定义接口,只提供方法的定义,不提供方法的实现。

  • 在该案例中,需要定义一个onRefreshListener() 接口, 不需要listview自己去实现,而是需要调用者去实现

1
2
3
4
5
6
7
8
9
10
public interface OnRefreshListener {
onPullRefresh();
onLoadMore();
}
private OnRefreshListener listener;
public void setOnRefreshListener(OnGlobalLayoutListener listener) {
this.listener = listener;
}
// 在listview中,让listener调用需要使用的方法
// 在调用出,实现接口中的两个方法

思路

  • 下拉刷新,上拉加载

需要两个布局文件view

  • headerView

    • 旋转加载的小圆圈 : 定义一个rotate的动画文件
  • footerView :

    • 复用上面的小圆圈

初始化

  • headerView : 找到所有的控件 iv_rotate, iv_arrow, tv_state, tv_time

  • footerView : 初始化布局即可

  • animation : 初始化动画,在headerview中,iv_arrow需要用到rotate动画, 角度分别为0-180, 180-360

  • setOnScrollListener : 滑动监听,上拉加载更多时需要用到。(下拉刷新,用onTouchEvent()事件)

逻辑处理

  • 在onTouchEvent()方法中处理 :下拉刷新

  • 在onScrollStateChanged()中处理 :上拉加载

逻辑处理中的判断

  • headerView 三种状态的判断

    下拉刷新 -> 松开刷新 -> 正在刷新

  • 待业务处理完(下拉刷新、上拉加载完成)后,记得恢复到初始状态

代码在e盘