找到RecyclerView的最后一行方法的封装

来源:互联网 发布:《简明python教程》 编辑:程序博客网 时间:2024/06/07 09:04

public class FindLastItem {//无论是什么的Manager都可以进行这个类来判断,并且成功了就发送一条广播
private RecyclerView recyclerView;
private Context context;

public FindLastItem(RecyclerView recyclerView, Context context) {    this.recyclerView = recyclerView;    this.context = context;}public void refresh() {    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {        @Override        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {            //当前RecyclerView显示出来的最后一个的item的position            int lastPosition = -1;            //当前状态为停止滑动状态SCROLL_STATE_IDLE时            if (newState == RecyclerView.SCROLL_STATE_IDLE) {                RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();                if (layoutManager instanceof GridLayoutManager) {                    //通过LayoutManager找到当前显示的最后的item的position                    lastPosition = ((GridLayoutManager) layoutManager).findLastVisibleItemPosition();                } else if (layoutManager instanceof LinearLayoutManager) {                    lastPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();                } else if (layoutManager instanceof StaggeredGridLayoutManager) {                    //因为StaggeredGridLayoutManager的特殊性可能导致最后显示的item存在多个,所以这里取到的是一个数组                    //得到这个数组后再取到数组中position值最大的那个就是最后显示的position值了                    int[] lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];                    ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(lastPositions);                    lastPosition = findMax(lastPositions);                }                // 时判断界面显示的最后item的position是否等于itemCount总数-1也就是最后一个item的position                //如果相等则说明已经滑动到最后了                //发送一条广播通知更新数据                if (lastPosition == recyclerView.getLayoutManager().getItemCount() - 1) {                    Intent intent = new Intent("UP_DATA");                    context.sendBroadcast(intent);                }            }        }        @Override        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {        }    });}private int findMax(int[] lastPositions) {    int max = lastPositions[0];    for (int value : lastPositions) {        if (value > max) {            max = value;        }    }    return max;}

}

3 0
原创粉丝点击