我正在使用带有 RecyclerView.Adapter
的 Android 数据绑定(bind)。
在 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
的 onBindViewHolder
看起来像这样:@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
MyData myData = mDataList.get(position);
holder.render(myData);
....
}
最后,我的
render
的 MyViewHolder
函数如下所示:public void render(MyData data, boolean expand) {
mBinding.setData(data); // mBinding is an instance of ListItemMyDataBinding
}
在我的
xml
中有一些数据绑定(bind):<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
被重用,并且作为第一步,适配器意识到它可以重用 View 并显示它,并且只有(几分之一秒)在它应用布局更改后(通过数据绑定(bind)) ,这就是为什么我看到旧值闪烁的原因。这很烦人。如果在函数
render
中我手动为 View 设置了默认值(例如 setText("")
上的 TextView
),那么我看不到闪烁效果,但这不是我想要的解决方案。你有什么建议我怎样才能很好地避免这种“闪烁/滞后”效果,我做错了什么?
谢谢
最佳答案
称呼
mBinding.executePendingBindings ();
就在
mBinding.setData(data);
之后关于渲染时Android数据绑定(bind)滞后,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41021777/