Android RecyclerView实现下拉刷新和上拉加载

2019-12-10 18:00:17于海丽

首先获取布局管理器,并判断是那种类型的,因为有三种类型,定义枚举来保存布局类型的参数

/**
 *
 * RecycleView的布局管理器的类型
 * Created by Alex_MaHao on 2016/5/10.
 */
public enum LayoutManagerType {
  LINEAR_LAYOUT,
  GRID_LAYOUT,
  STAGGERED_GRID_LAYOUT
}

然后根据布局惯例其的类型获取其当前显示的最大条目,对于瀑布流来说,他如果是垂直的两列瀑布的话,我们需要获取两列中分别最大条目数,进行比较,选出最大条目数。

  /**
   * 当是瀑布流时,获取到的是每一个瀑布最下方显示的条目,通过条目进行对比
   */
  private int findMax(int[] lastPositions) {
    int max = lastPositions[0];
    for (int value : lastPositions) {
      if (value > max) {
        max = value;
      }
    }
    return max;
  }

拿到当前最大的条目数之后,在onScrollStateChange中进行判断状态等,

 @Override
  public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

    RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();

    //RecycleView 显示的条目数
    int visibleCount = layoutManager.getChildCount();

    //显示数据总数
    int totalCount = layoutManager.getItemCount();


    // 四个条件,分别是是否有数据,状态是否是滑动停止状态,显示的最大条目是否大于整个数据(注意偏移量),是否正在加载数据
    if(visibleCount>0
        &&newState==RecyclerView.SCROLL_STATE_IDLE
        &&mLastVisibleItemPosition>=totalCount-1
        &&!isLoadData){
      //可以加载数据
      isLoadData = true;
    }

  }