给RecyclerView扩展下拉刷新上拉加载

给RecyclerView扩展下拉刷新上拉加载列表分页和下拉刷新是列表页的常用功能。在Android开发中,列表一般用ListView或RecyclerView实现。 RecyclerView比ListView用起来更加的顺手,但是无论是RecyclerView还是ListView都没有列表分页和下拉刷新功能。这次就已Re…

列表分页和下拉刷新是列表页的常用功能。在Android开发中,列表一般用ListView或RecyclerView实现。

RecyclerView比ListView用起来更加的顺手,但是无论是RecyclerView还是ListView都没有列表分页和下拉刷新功能。这次就已RecyclerView为例,使用尽量少的代码,让RecyclerView带有下拉和底部上拉的监听。

我使用的是kotlin 扩展函数。

这次没有效果图。

O(∩_∩)O~

直接撸代码:

    1. 首先,要用到的下拉效果就需要Android自带的SwipeRefreshLayout,所以需要在布局文件RecyclerView的外面套一个SwipeRefreshLayout。(你可以把这个布局文件当成模版,在需要列表的页面直接include进来。)
    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />


    </android.support.v4.widget.SwipeRefreshLayout>
  • 2.然后写个接口Listener
interface RecyclerListener {
    fun loadMore()
    fun refresh()
}
  • 3.接着是核心代码,给RecycleerView加上扩展,下面的代码可以放在项目中的任何kotlin文件中。
//在布局中,RecyclerView外嵌套一个swipeRefreshLayout,即可实现下拉刷新上拉加载更多
fun RecyclerView.setListener(l: RecyclerListener){
    setOnScrollListener(object : RecyclerView.OnScrollListener() {
        var lastVisibleItem: Int = 0
        val swipeRefreshLayout = this@setListener.parent
        override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)
            lastVisibleItem = (recyclerView?.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()
        }

        override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
            super.onScrollStateChanged(recyclerView, newState)
            if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 === recyclerView.adapter?.itemCount) {
                //下拉刷新的时候不可以加载更多
                if(swipeRefreshLayout is SwipeRefreshLayout){
                    if(!swipeRefreshLayout.isRefreshing){
                        l.loadMore()
                    }
                }else{
                    l.loadMore()
                }
            }
        }

    })

    val swipeRefreshLayout = this.parent
    if(swipeRefreshLayout is SwipeRefreshLayout){
        swipeRefreshLayout.setOnRefreshListener {
            l.refresh()
        }
    }

}
  • 4.到此所有的准备工作就结束了。最后在整个项目中,需要下拉刷新的地方直接加上监听器即可
recyclerView.setListener(object :RecyclerListener{
            override fun loadMore() {
            }

            override fun refresh() {
            }
        })

总结,下拉刷新的触发是由swipeRefreshLayout 监听的,上拉是监听RecyclerView滚动到底部触发的。是kotlin 的扩展函数可以很方便的在不破坏原有代码结构的前提下扩展功能。

今天的文章给RecyclerView扩展下拉刷新上拉加载分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16326.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注