使用SmartRefreshLayout简易实现下拉刷新效果

文章不好看?刷新!你让不感兴趣?刷新!...这些操作应该是我们在刷手机时较为常见的操作了,那我我们在Android里面应该怎么实现这样的效果呢?(效果如下所示)

首先,要能展示不同的内容,我们就得获取到不同的内容,而我这边只是简易的实现,所以本次示例的所有内容均来自本人mock的构造,请加以区分。具体的数据构造,网络请求数据以及获取数据本次就不过多演示(网络请求代码展示)(该部分可以先不看,先看后面的)

   List<KeChenFragmentMessage.TotalDTO> totalDTOS = new ArrayList<>();
    List<KeChenFragmentMessage.TotalDTO.Chatlist5DTO> chatList5 = new ArrayList<>();
    List<KeChenFragmentMessage.TotalDTO.Chatlist6DTO> chatList6 = new ArrayList<>();

.......


Request request = new Request.Builder()
                .url("https://dev.usemock.com/your_url")
                .get()
                .build();
        OkHttpClient okHttpClient = new OkHttpClient();
        // call对象发起请求
        Call call = okHttpClient.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {

                String result = response.body().string();
                Log.i("test5",result);
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Gson gson = new Gson();
                        KeChenFragmentMessage keChenFragmentMessage = gson.fromJson(result,KeChenFragmentMessage.class);
                        totalDTOS.addAll(keChenFragmentMessage.total);
                        chatList5.addAll(totalDTOS.get(0).chatlist5);
                        chatList6.addAll(totalDTOS.get(1).chatlist6);

                        myAdpater.notifyDataSetChanged();
                    }
                });

            }
        });

接着,在我们拿到数据后,就需要用到SmartRefreshLayout啦

(简单介绍:SmartRefreshLayout 是一个用于 Android 平台的开源下拉刷新和上拉加载更多库。它提供了高度定制化的下拉刷新和上拉加载的功能,支持各种样式和效果的定制,可以很方便地集成到 Android 应用中,用于优化用户体验,增强应用的交互性。)

在使用SmartRefreshLayout之前我们需要在在gradle文件中添加

    implementation  ("io.github.scwang90:refresh-layout-kernel:2.1.0")      //核心必须依赖
    implementation  ("io.github.scwang90:refresh-header-classics:2.1.0")    //经典刷新头
    implementation  ("io.github.scwang90:refresh-header-radar:2.1.0")       //雷达刷新头
    implementation  ("io.github.scwang90:refresh-header-falsify:2.1.0")     //虚拟刷新头
    implementation  ("io.github.scwang90:refresh-header-material:2.1.0")    //谷歌刷新头
    implementation  ("io.github.scwang90:refresh-header-two-level:2.1.0")   //二级刷新头
    implementation  ("io.github.scwang90:refresh-footer-ball:2.1.0")        //球脉冲加载
    implementation  ("io.github.scwang90:refresh-footer-classics:2.1.0") 

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

android.useAndroidX=true
 android.enableJetifier=true

对于相应的xml布局文件的布局设置思路:在SmartRefreshLayout下面布置一个recycle view

准备工作做完后我们就只需要,写出以下代码便可简易实现效果

        smartRefreshLayout = view.findViewById(R.id.smartlayout);
//设置下拉刷新样式
        smartRefreshLayout.setRefreshHeader(new ClassicsHeader(getContext()));

        smartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                // 根据标志位切换数据集
                if (showChatList5) {
                    // 清空 chatList5 并填充数据
                    chatList5.clear();
                    for (KeChenFragmentMessage.TotalDTO.Chatlist6DTO item : totalDTOS.get(1).chatlist6) {
                        KeChenFragmentMessage.TotalDTO.Chatlist5DTO newItem = new KeChenFragmentMessage.TotalDTO.Chatlist5DTO();
                        // 已知chatlist6 中的属性和 chatlist5 中的属性一样
                        newItem.url = item.url;
                        newItem.classname = item.classname;
                        newItem.price = item.price;
                        newItem.studyNum = item.studyNum;
                        chatList5.add(newItem);
                    }
                    // 切换标志位
                    showChatList5 = false;
                } else {
                    // 清空 chatList5 并填充数据
                    chatList5.clear();
                    for (KeChenFragmentMessage.TotalDTO.Chatlist5DTO item : totalDTOS.get(0).chatlist5) {
                        KeChenFragmentMessage.TotalDTO.Chatlist5DTO newItem = new KeChenFragmentMessage.TotalDTO.Chatlist5DTO();
                        newItem.url = item.url;
                        newItem.classname = item.classname;
                        newItem.price = item.price;
                        newItem.studyNum = item.studyNum;
                        chatList5.add(newItem);
                    }
                    // 切换标志位
                    showChatList5 = true;
                }

                smartRefreshLayout.finishRefresh(500);
                myAdpater.notifyDataSetChanged();
            }
        });

注意:本次示例的数据构造均为相同类型,具体需要实现其他逻辑效果只需要在onRefresh方法中编辑新的逻辑即可。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值