我正在使用带有RecyclerView.Adapter
的Android数据绑定。
在Adapter
onCreateViewHolder
我致电:
public TransfersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(
ListItemMyDataBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent,
false));
}
所以ListItemMyDataBinding
代表list_item_my_data.xml
。
Adapter
' s onBindViewHolder
看起来像这样:
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
MyData myData = mDataList.get(position);
holder.render(myData);
....
}
最后,render
的{{1}}函数如下所示:
MyViewHolder
在我的public void render(MyData data, boolean expand) {
mBinding.setData(data); // mBinding is an instance of ListItemMyDataBinding
}
中有一些数据绑定:
xml
我在可搜索列表中使用此方法,因此我在列表顶部有一个搜索字段。一旦用户输入新的搜索词,列表就会被清除并通知有关更改,一旦响应从服务器返回,我将所有结果添加到列表中并再次通知更改。
最后问题是发生以下情况:
据我了解,这是因为<data>
<import type="com.example.MyData" />
<variable
name="data"
type="MyData" />
</data>
...
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{data.userName}" />
被重用,作为第一步,适配器意识到它可以重用一个视图并显示它,并且在应用更改后只有(几分之一秒)在布局中(通过数据绑定),这就是为什么我看到旧值闪烁的原因。这很烦人。
如果在函数View
中我手动为视图设置默认值(例如render
上的setText("")
),那么我看不到闪烁效果,但这不是我想要的解决方案
你有什么建议我怎么能很好地避免这种情况&#34;眨眼/滞后&#34;效果,我做错了什么?
由于
答案 0 :(得分:8)
呼叫
mBinding.executePendingBindings ();
在mBinding.setData(data);