加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

分析RecyclerView下拉刷新与上拉更多

发布时间:2021-05-29 12:37:33 所属栏目:教程 来源:互联网
导读:EnhanceRecyclerView 我将这个扩展的RecyclerView命名为EnhanceRecyclerView,继承RecyclerView。我们知道既然要实现下拉刷新与上拉更多自然先要实现头部与尾部
副标题[/!--empirenews.page--]

我将这个扩展的RecyclerView命名为EnhanceRecyclerView,继承RecyclerView。我们知道既然要实现下拉刷新与上拉更多自然先要实现头部与尾部的布局,所以我们先利用前面的知识来为EnhanceRecycleView添加header与footer

public void initView() { 

        View headerView = LayoutInflater.from(getContext()).inflate(R.layout.head_layout, null); 

        View footerView = LayoutInflater.from(getContext()).inflate(R.layout.footer_layout, null); 

        addHeaderView(headerView); 

        addFooterView(footerView); 

    } 

其中的布局文件就不多说了,至于addHeaderView与addFooterView方法可以查看我前面的那篇文章,有详细的介绍

设置监听器

既然要实现下拉刷新与上拉加载,自然少不了对监听器的处理,所以下面来详细介绍下对监听器OnScrollListener与OnTouchListener的处理。

OnScrollListener

为EnhanceRecyclerView添加addOnScrollListener实现其中的onScrollStateChanged与onScrolled方法。

onScrolled

在onScrolled中我们主要做的是获取EnhanceRcyclerView中item的总数量、视图显示中的***个item在EnhanceRecyclerView中所处的位置与视图显示中***一个item在EnhanceRecyclerView中所处的位置。

对于item的总数量很好获取直接调用

totalCount = getLayoutManager().getItemCount(); 

由于RecyclerView能实现LinearLayoutManager、GridLayoutManager与StaggeredGridLayoutManager不同的布局,所以另外两个要根据不同的manager来获取,还是看具体代码吧

if (getLayoutManager() instanceof LinearLayoutManager) { 

                    lastItem = ((LinearLayoutManager) getLayoutManager()).findLastVisibleItemPosition(); 

                    firstVisible = ((LinearLayoutManager) getLayoutManager()).findFirstVisibleItemPosition(); 

                } else { 

                    into = ((StaggeredGridLayoutManager) getLayoutManager()).findLastVisibleItemPositions(into); 

                    firstInto = ((StaggeredGridLayoutManager) getLayoutManager()).findFirstVisibleItemPositions(firstInto); 

                    lastItem = into[0]; 

                    firstVisible = firstInto[0]; 

                } 

onScrollStateChanged

获取到了那三个关键数据以后,就可以在onScrollStateChanged中实现具体的逻辑,在这个方法中主要实现的是对上拉加载更多的处理

if (lastItem == adapter.getItemCount() + 1 && newState == RecyclerView.SCROLL_STATE_IDLE && !isLoad) { 

                    ViewGroup.LayoutParams params = getFooterView(0).getLayoutParams(); 

                    params.width = RecyclerView.LayoutParams.MATCH_PARENT; 

                    params.height = RecyclerView.LayoutParams.WRAP_CONTENT; 

                    getFooterView(0).setLayoutParams(params); 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!