美文网首页
支持下拉刷新上拉加载的RecyclerView

支持下拉刷新上拉加载的RecyclerView

作者: 请叫我刘中二 | 来源:发表于2019-12-02 15:51 被阅读0次

    前言

    纵观多数App,下拉刷新和上拉加载更多是很常见的功能,但是谷歌官方只有一个SwipeRefreshLayout用来下拉刷新,上拉加载更多还要自己做。

    集成

    第一种:maven库引用

    #在项目的build.gradle中加下以下maven地址
    maven {
       url 'https://dl.bintray.com/module-android/SimplePullView/'
    }
    #在app目录的build.gradlezhon加
        compile 'com.jason.simple:PullRecyclerView:1.0.3'
    

    使用

    1.直接使用SRecyclerView进行布局(head_height是用于设置松开手后,下拉刷新的触发高度和展示高度)
    ```

    <com.jason.recyclerview.SRecyclerView
            android:id="@+id/rv_branch_bank"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:head_height="80dp">
    </com.jason.recyclerview.SRecyclerView>
    
    
    ```
    

    2.SRecyclerView的适配器需要继承SRecyclerAdapter,并实现onCreateHolder,onBindHolder,getCount(),getViewType4个方法

    class BranchBankAdapter(var mContext: Context,var list: MutableList<String>): SRecyclerAdapter(mContext) {
    
        override fun onCreateHolder(viewGroup: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
            val view=View.inflate(mContext,R.layout.item_bank_sup_layout,null)
            view.layoutParams= ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT)
            return BranchBankViewHolder(view)
        }
    
        override fun onBindHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {
            (viewHolder as BranchBankViewHolder).setData(position)
        }
    
        override fun getCount(): Int=list.size
    
        override fun getViewType(position: Int): Int=0
    
        class BranchBankViewHolder(var view:View):RecyclerView.ViewHolder(view){
            fun setData(position: Int){
                view.tv_first.text="交通银行上海六里河支行$position"
                view.tv_second.text="支行联行号:736353684484"
            }
        }
    }
    
    

    3.SRecyclerListener用于监听SRecyclerView的下拉刷新和上拉加载的动作

    SRecyclerView.setSRecyclerListener(object : SRecyclerListener {
                override fun loadMore() {
                    handler.postDelayed({
                        for (i in 0 until 10){
                            list.add("你好世界")
                        }
                        rv_branch_bank.notifyDataSetChanged()
    
                    },1000)
                }
    
                override fun refresh() {
                    handler.postDelayed({
                        list.clear()
                        for (i in 0 until 50){
                            list.add("你好世界")
                        }
                        rv_branch_bank.complete()
                        mAdapter?.notifyDataSetChanged()
                    },5000)
                }
     })
    
    

    4.支持自定义刷新头和加载尾布局

    刷新头需要继承RefreshViewHolder,在构造方法中传入自己的布局,并重写notifyHeight
    
    加载尾同上
    
    例子可以参考库中的 DefaultRefreshViewHolder
    
    使用:可以通过适配器设置刷新头和加载尾
    
    mAdapter.setFootViewHolder("传入自定义的加载尾")
    
    mAdapter.setHeadViewHolder("传入自定义的刷新头")
    
    
    
    
    

    5.控制是否允许刷新或者加载

     SRecyclerView.isCanLoadMore 
     
     SRecyclerView.isCanRefresh 
       
    

    6.设置layoutManager(默认LinerLayoutManager )

       SRecyclerView.setLayoutManager
       
       请务必通过此方法调用setLayoutManager
       
    

    7.设置spanSizeLookup

      SRecyclerView.setSpanSize
      
      请务必通过此方法调用GridLayoutManager的设置spanSizeLookup
          
    

    代码地址

    (https://github.com/liujun123456/jason/tree/master/srecyclerview)
    
    

    效果

    LinerLayoutManager效果图 GridLayoutManager效果图

    相关文章

      网友评论

          本文标题:支持下拉刷新上拉加载的RecyclerView

          本文链接:https://www.haomeiwen.com/subject/bllfgctx.html