美文网首页
Android开发之SmartRefresh实现类似聊天的下拉加

Android开发之SmartRefresh实现类似聊天的下拉加

作者: SeekLife0 | 来源:发表于2022-01-12 22:22 被阅读0次

一、概述:
应用场景聊天下拉加载聊天记录。


实现:
参考:SmartRefresh官方DEMO
1、布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:fitsSystemWindows="true"
    android:orientation="vertical"
    tools:context=".message.SettingMessageActivity">

    <com.hjq.bar.TitleBar
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:title="系统消息"
        />

    <com.scwang.smart.refresh.layout.SmartRefreshLayout
        android:id="@+id/srl"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_message"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f4f4f4"
            android:overScrollMode="never"
            />

        <com.scwang.smart.refresh.footer.ClassicsFooter
            android:id="@+id/footer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleY="-1"
            app:srlTextPulling="下拉加载更多">
        </com.scwang.smart.refresh.footer.ClassicsFooter>

    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
</LinearLayout>

2、activity中
在activtiy初始化时设置

        //设置加载更多组件
        var arrow = footer.findViewById<View>(ClassicsFooter.ID_IMAGE_ARROW)
        arrow.scaleY = -1f
        //设置刷新组件
        srl.setEnableRefresh(false) //必须关闭
        srl.setEnableAutoLoadMore(true) //必须关闭
        srl.setEnableNestedScroll(false) //必须关闭
        srl.setEnableScrollContentWhenLoaded(true)//必须关闭
        srl.layout.scaleY = -1f//必须设置
        srl.setScrollBoundaryDecider(object : ScrollBoundaryDeciderAdapter(){
            override fun canLoadMore(content: View?): Boolean {
                return super.canRefresh(content) //必须替换
            }
        })

绑定事件监听

        //只监听加载更多
        srl.setOnLoadMoreListener(object : OnLoadMoreListener {
            override fun onLoadMore(refreshLayout: RefreshLayout) {
                page++
                //发出请求加载数据
                RequestMoreData(page)
            }
        })

加载更多数据方法

    //加载更多数据
    private fun RequestMoreData(pageNum: Int) {
        //rxhttp获取后台数据
        RxHttp.postJson(Constant.MYMESSAGE)
            .addHeader(Constant.TOKEN, AppSharedPreferences.getInstance(me).token)
            .add("limit", Constant.PAGESIZE)
            .add("page", pageNum)
            .asClass(MessageData::class.java)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({ a ->
                if (a.data.size == 0){
                    Log.e("消息加载更多调试", "数据是否为0:" + a.data.size)
                    srl.finishLoadMore(0, true, true)
                }
                if (a.data != null && a.data.size != 0) {
                    //插入数据至开始位置而不是末尾加入
                    messageAdapter.addData(0,a.data)//addData(a.data)
                    srl.finishLoadMore(800, true, false)
                }
            }, { throwable ->
                Log.e("消息加载更多调试", "error:" + throwable)
            })
    }

页面第一次获取数据时的绑定数据到RecyclerView操作

    fun bindData(position : Int){
        //设置recyclerView
        rvRecyclerView.scaleY = -1f
        var manager = LinearLayoutManager(me)
        //该方法设置初始化时RecyclerView显示为列表底部,第一个参数postion为item项编号,第二个参数为距离顶部偏移量
        manager.scrollToPositionWithOffset(position,0) //获取当前列表最大值减1,传入不存在的position则啥也不干
        rvRecyclerView.layoutManager = manager
        rvRecyclerView.adapter = messageAdapter
        //保证开始时在最底部
        messageAdapter.setOnItemClickListener { adapter, view, position ->
        }
    }

相关文章

网友评论

      本文标题:Android开发之SmartRefresh实现类似聊天的下拉加

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