本⽂实例为⼤家分享了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 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\ Data(\"456\ Data(\"7\ ) 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
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务