您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页RecyclerView使用payload实现局部刷新

RecyclerView使用payload实现局部刷新

来源:尚车旅游网
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\ 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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务