RecyclerView的局部刷新居然这么简单

RecyclerView的局部刷新

面试时经常被问到Android列表控件RecyclerView,无非就是深入源码与ListView进行对比,四层缓存和局部刷新。而今天的重点就是局部刷新

使用场景

我们在使用RecyclerView的局部刷新时,往往使用notify相关方法,如下

这样写,确实可以解决大部分问题,但是这种局部刷新需要我们精准的指定具体的position。这种局限性使他只能适用于小范围的内容修改。

但我们的数据往往是从livedata获取到的,难道为了实现局部刷新,还要我们自己对比list发生改变的下标吗。可能大家都不会花时间做出回报率低的优化,直接使用notifyDataSetChanged()进行全局刷新(一个字,快)。

但官方早就预判到了大家的懒惰机智,推出了DiffUtil,AsyncListDiffer,ListAdapter等局部刷新大礼包,可以自动分析oldList和newList的差异,自动实现局部刷新。

代码部分

先放代码

kotlin 复制代码
private class MyListAdapter : ListAdapter<Int, MyListAdapter.MyViewHolder>(
    object : DiffUtil.ItemCallback<Int>() {
        override fun areItemsTheSame(oldItem: Int, newItem: Int): Boolean {
            return oldItem == newItem
        }

        override fun areContentsTheSame(oldItem: Int, newItem: Int): Boolean {
            return oldItem == newItem
        }

    }
) {
    class MyViewHolder(binding: AdapterListBinding) : RecyclerView.ViewHolder(binding.root) {
        val text = binding.textView
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        return MyViewHolder(
            AdapterListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        )
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.text.text = getItem(position).toString()
    }
}

数据刷新

kotlin 复制代码
adapter.submitList(listOf(1, 2, 3, 4, 5))

后续

遇到这种好工具太激动了,先放代码,正准备深入源码,随后更新

相关推荐
lpruoyu2 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E3 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇6 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly8 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者811 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码203511 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥11 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓11 小时前
[JDBC]元数据
android
独行soc11 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能11 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio