美文网首页
android下拉刷新 (kotlin)

android下拉刷新 (kotlin)

作者: 心中有梦丶身边有你 | 来源:发表于2020-08-14 09:51 被阅读0次

引入依赖:

//上拉刷新下拉加载:
    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'

布局xml文件

  <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srlEnableRefresh="true">

    <-刷新的头部->
        <com.scwang.smartrefresh.layout.header.ClassicsHeader
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <com.hjq.widget.layout.HintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/credit_list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="50dp" />
        </com.hjq.widget.layout.HintLayout>
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>

1597368732(1).png

在activity中

  //定义的bean
 private var listbean: ArrayList<Bean>? = null
  //adapter
    lateinit var adapter: MyAdapter
  //分页   从1开始
    var pageNow = 1
//是否有数据可继续上拉加载
    var isEnd = false



 //上拉下拉刷新事件
        refreshLayout_credit.setOnRefreshListener { refreshlayout ->
            refreshlayout.finishRefresh(2000/*,false*/)//传入false表示刷新失败
            pageNow = 1
            isEnd = false
            listbean!!.clear()
            adapter.notifyDataSetChanged()
            initData()//请求数据的方法
        }
        refreshLayout_credit.setOnLoadMoreListener { refreshlayout ->
            refreshlayout.finishLoadMore(2000/*,false*/)//传入false表示加载失败
            if (isEnd) {
                ToastUtils.showShort("无更多数据!")
                refreshLayout_credit.finishRefresh()//停止刷新
            } else {
                initData()//请求数据的方法
            }
        }

    /**
     * 请求列表
     */
    private fun initData() {
        showLoading()//加载中的弹窗

                        //请求方法都不一样,我只发一下请求成功之后的解析吧
                      //我这里解析用的阿里的fastjson: 
                      // implementation 'com.alibaba:fastjson:1.1.71.android'

                       //括号第一个是返回的数据,第二个是封装的bean
                        var list = JSON.parseArray(apiResult.data,Bean::class.java)
                   
                        //如果数据小于每页的数量 不在加载更多
                        if (list.size >= 10) { //分页的数量   如果后台返回的list长度大于10,分页就+1
                            pageNow++
                        } else {
                            isEnd = true
                        }
                        listbean!!.addAll(list)
                        adapter.setNewData(listbean)//adapter设置数据
                        adapter.notifyDataSetChanged()//刷新adapter
                     
                        refreshLayout_credit.finishRefresh()   //结束刷新
                      
                        showComplete()   //结束加载
                    }
                    else -> {
                        showComplete()//结束加载 
                        //页面如果为1,显示空数据布局,否则弹出toast
                        if (pageNow == 1) {
                            //数据为空的提示布局
                            showEmpty()
                        } else {
                            toast("后台返回的错误信息")
                        }
    }

Adapter

//万能适配器   implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.47'

class  MyAdapter(layoutResId: Int, data: List<Bean?>?) :
            BaseQuickAdapter<Bean, BaseViewHolder>(layoutResId, data) {
        override fun convert(helper: BaseViewHolder, item: Bean) {
                  //这里就不多说了,就一个设置数据的adapter而已
                  helper.setText(R.id.item, item.mark)
                            .setText(R.id.tv_number, item.score)
        }
    }

相关文章

网友评论

      本文标题:android下拉刷新 (kotlin)

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