RecyclerView使用databinding出现数据闪烁问题

更新时间:2023-07-17 13:47:42 阅读: 评论:0

RecyclerView使⽤databinding出现数据闪烁问题
When something takes longer than expected, write it down.
问题产⽣:
最近做项⽬遇到RecyclerView使⽤databinding时,出现数据闪烁,⽼⼤说,这问题不解决就不要⽤databinding。。。
闪烁图效果如下,点击Refresh,数据闪了⼀次:
明明数据没变,但数据却刷了⼀遍。
代码如下:
class TestDBAdapter extends RecyclerView.Adapter<TestDBViewHolder> {
private List<TestData> list;
public TestDBAdapter(List<TestData> list) {
this.list = list;
馆子
}
@Override
public TestDBViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemTestDbRecyclerViewBinding binding = DataBindingUtil.inflate(LayoutInflater.Context()), R.layout.item_test_db_recycler_view, parent, fal);
return new TestDBViewHolder(binding);
}
@Override
public void onBindViewHolder(TestDBViewHolder holder, int position) {
吃石榴的好处与功效
holder.binding.(position));
//            utePendingBindings();
什么汤下奶
}
@Override
钮祜禄氏
public int getItemCount() {
return list.size();
}
}
class TestDBViewHolder extends RecyclerView.ViewHolder {
public ItemTestDbRecyclerViewBinding binding;
public TestDBViewHolder(ItemTestDbRecyclerViewBinding binding) {
既然是什么意思Root());
this.binding = binding;
}
public TestDBViewHolder(View itemView) {
super(itemView);
}
}沙格列汀>唇焦口燥呼不得
}
问题追踪:
从图中可以看到item从浙江-->⼴东-->浙江,这个简单,因为recycler view会重⽤item,刷新时,第⼀个元素使⽤了第四个元素的ViewHolder。
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (holder instanceof TaskItemViewHolder) {
final TaskItemViewHolder taskItemViewHolder = (TaskItemViewHolder) holder;
LogUtils.d("before: "+Binding().getData());//打印bind前holder中的数据
taskItemViewHolder.(position), position);
LogUtils.d("after: "+(position)+" position:"+position);//打印当前item的数据
}
}
打印结果:
before: ⼴东
after: 浙江
数据是肯定变了,难道数据闪烁是正常的,那为什么不⽤databinding时,没有出现数据闪烁现象?有⼈说全局刷新时layout重置。。。/**
* Evaluates the pending bindings, updating any Views that have expressions bound to
* modified variables. This <b>must</b> be run on the UI thread.
*/
bindData后⽴即刷新!
难道要⽴刻刷新?还没有搞清楚。。。
问题解决:
@Override
public void onBindViewHolder(TestDBViewHolder holder, int position) {
holder.binding.(position));
utePendingBindings();//加⼀⾏,问题解决
}
遗留问题:
1. RecyclerView notifyDataChanged时,明明item的数据变化了,但为什么没有闪烁呢?
2. executePendingBindings语句到底是什么⽤?调与不调有什么区别?东莞英语

本文发布于:2023-07-17 13:47:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1101423.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   闪烁   出现   问题
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图