【Android】SmartRefreshLayout实现下拉刷新,上拉加载效果

简介

使用SmartRefreshLayout,实现下拉刷新,上拉加载效果。

流程

1. 引入依赖

此处只引用核心依赖,经典布局,更多上拉下拉动画效果可参考仓库GitHub SmartRefreshLayout

implementation  'com.scwang.smart:refresh-layout-kernel:2.0.3'
implementation  'com.scwang.smart:refresh-header-classics:2.0.3'

如果使用 AndroidX 需要先在 gradle.properties 中添加

android.useAndroidX=true
android.enableJetifier=true

2. 建立布局

ClassicsHeader为下拉后的布局,ClassicsFooter为上拉时下方的布局,本文均采用经典布局。

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

		<com.scwang.smart.refresh.header.ClassicsHeader
			android:layout_width="match_parent"
			android:layout_height="wrap_content" />
		
		<androidx.recyclerview.widget.RecyclerView
			android:id="@+id/rv_log"
			android:layout_width="match_parent"
			android:layout_height="match_parent"
			tools:itemCount="50"
			tools:listitem="@layout/item_log" />
		
		<com.scwang.smart.refresh.footer.ClassicsFooter
			android:layout_width="match_parent"
			android:layout_height="wrap_content" />
</com.scwang.smart.refresh.layout.SmartRefreshLayout>

3. 实现逻辑

SmartRefreshLayout refreshLayout = dialog.findViewById(R.id.refreshLayout);
//实现下拉刷新 (此处借助了rxutil2实现IO操作后更新UI操作:RxJavaUtils.executeAsyncTask())
refreshLayout.setOnRefreshListener(refreshlayout -> RxJavaUtils.executeAsyncTask(new RxAsyncTask<Object, List<Log>>(null) {
      @Override
      public List<Log> doInIOThread(Object o) {
        	//耗时操作:数据刷新
            return 数据;
        }

        @Override
        public void doInUIThread(Log 数据) {
        	//数据加载至RecycleView
           	adapter.setDataList(数据);
       		notifyDataSetChanged();
       		//结束SmartRefreshLayout刷新动画
   			refreshlayout.finishRefresh();
        }
}));
//实现上拉加载更多
refreshLayout.setOnLoadMoreListener(refreshlayout -> RxJavaUtils.executeAsyncTask(new RxAsyncTask<Object, List<Log>>(null) {
      @Override
      public List<Log> doInIOThread(Object o) {
        	//耗时操作:数据加载
            return 数据;
        }

        @Override
        public void doInUIThread(Log 数据) {
        	//数据加载至RecycleView
           	adapter.setDataList(数据);
       		notifyDataSetChanged();
       		//结束SmartRefreshLayout刷新动画
              if (数据.size() == 0) {
                  refreshlayout.finishLoadMoreWithNoMoreData();
              } else {
                  refreshlayout.finishLoadMore();
              }
        }
}));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 SmartRefreshLayout 实现下拉刷新上拉加载非常简单,只需要在 XML 文件中添加对应的控件,并在 Kotlin 代码中实现对应的回调函数即可。 首先,在 XML 文件中添加 SmartRefreshLayout 控件和一个 RecyclerView 控件: ```xml <com.scwang.smartrefresh.layout.SmartRefreshLayout android:id="@+id/refreshLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout> ``` 接下来,在 Kotlin 代码中设置刷新和加载的回调函数: ```kotlin import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.scwang.smartrefresh.layout.api.RefreshLayout import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener import com.scwang.smartrefresh.layout.listener.OnRefreshListener import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity(), OnRefreshListener, OnLoadMoreListener { private lateinit var adapter: MyAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val layoutManager = LinearLayoutManager(this) recyclerView.layoutManager = layoutManager adapter = MyAdapter() recyclerView.adapter = adapter refreshLayout.setOnRefreshListener(this) refreshLayout.setOnLoadMoreListener(this) refreshLayout.autoRefresh() } override fun onRefresh(refreshLayout: RefreshLayout) { // 这里写下拉刷新逻辑,比如请求网络数据,更新数据源,然后刷新 RecyclerView adapter.notifyDataSetChanged() refreshLayout.finishRefresh() } override fun onLoadMore(refreshLayout: RefreshLayout) { // 这里写上拉加载逻辑,比如请求网络数据,更新数据源,然后刷新 RecyclerView adapter.notifyDataSetChanged() refreshLayout.finishLoadMore() } } ``` 在上面的代码中,我们实现了 OnRefreshListener 和 OnLoadMoreListener 接口,并重写了对应的回调函数 onRefresh 和 onLoadMore。在 onCreate 函数中,我们设置了 RecyclerView 的布局管理器和适配器,并将 SmartRefreshLayout下拉刷新上拉加载的监听器设置为当前 Activity。最后,我们调用了 autoRefresh 函数,自动触发下拉刷新。 至此,我们就完成了在 Kotlin 中使用 SmartRefreshLayout 实现下拉刷新上拉加载的简单案例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值