千家信息网

RecyclerView如何使用payload实现局部刷新

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,小编给大家分享一下RecyclerView如何使用payload实现局部刷新,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!列表局部刷新:01.notifyDataSetChanged
千家信息网最后更新 2025年02月02日RecyclerView如何使用payload实现局部刷新

小编给大家分享一下RecyclerView如何使用payload实现局部刷新,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

列表局部刷新:

01.notifyDataSetChanged() 刷新全部可见的item
02.notifyItemChanged(int position) 更新列表position位置上的数据可以调用
03.notifyItemInserted(int position) 列表position位置添加一条数据时可以调用,伴有动画效果
04.notifyItemRemoved(int position) 列表position位置移除一条数据时调用,伴有动画效果
05.notifyItemMoved(int fromPosition, int toPosition) 列表fromPosition位置的数据移到toPosition位置时调用,伴有动画效果
06.notifyItemRangeChanged(int positionStart, int itemCount) 列表从positionStart位置到itemCount数量的列表项进行数据刷新
07.notifyItemRangeInserted(int positionStart, int itemCount) 列表从positionStart位置到itemCount数量的列表项批量添加数据时调用,伴有动画效果
08.notifyItemRangeRemoved(int positionStart, int itemCount) 列表从positionStart位置到itemCount数量的列表项批量删除数据时调用,伴有动画效果

一、payload、notifyItemChanged()实现局部刷新:

1.在适配器中定义onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList)方法:

class NewsAdapter : ListAdapter(Diff()) {    //构建ListView的数据比较结果    class Diff : DiffUtil.ItemCallback() {        override fun areItemsTheSame(oldItem: Data, newItem: Data): Boolean {            return oldItem.hashId == newItem.hashId        }        override fun areContentsTheSame(oldItem: Data, newItem: Data): Boolean {            return oldItem.content == newItem.content        }    }    inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {        val tvContent: TextView = view.findViewById(R.id.tvContent)        var tvPlay: TextView = view.findViewById(R.id.tvPlay)        var tvPlay1: TextView = view.findViewById(R.id.tvPlay1)        var tvPlay2: TextView = view.findViewById(R.id.tvPlay2)    }    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {        val view = LayoutInflater.from(parent.context).inflate(R.layout.layout_joke_list_item, parent, false)        return ViewHolder(view)    }    override fun onBindViewHolder(holder: ViewHolder, position: Int) {        holder.tvContent.text = getItem(position).content        holder.tvPlay.text = "播放"        holder.tvPlay1.text = "播放"        holder.tvPlay2.text = "播放"    }    //局部刷新Item    override fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList) {        if(payloads.isEmpty()) {            onBindViewHolder(holder, position)        } else {            for (i in 0 until payloads.size) {                when(payloads[i].toString()) {                    "aaa" -> {                        holder.tvContent.text = "000"                    }                    "bbb" -> {                        holder.tvPlay.text = "222"                    }                }            }        }    }}

2.使用notifyItemChanged()进行局部刷新:

class MainActivity : AppCompatActivity() {    private lateinit var recycler: RecyclerView    private lateinit var mAdapter: NewsAdapter    val data = listOf(        Data("123", "123", 1, "123"),        Data("456", "456", 1, "456"),        Data("789", "789", 1, "789")    )    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        recycler = findViewById(R.id.recycler)        mAdapter = NewsAdapter()        val layoutManager = LinearLayoutManager(this)        recycler.layoutManager = layoutManager        recycler.adapter = mAdapter        mAdapter.submitList(data)        //点击局部刷新        findViewById

3.MainActivity布局文件:

    

4.列表Item布局文件:

                                                                        

看完了这篇文章,相信你对"RecyclerView如何使用payload实现局部刷新"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

0