渲染时Android数据绑定滞后

时间:2016-12-07 15:51:34

标签: android data-binding

我正在使用带有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

我在可搜索列表中使用此方法,因此我在列表顶部有一个搜索字段。一旦用户输入新的搜索词,列表就会被清除并通知有关更改,一旦响应从服务器返回,我将所有结果添加到列表中并再次通知更改。

最后问题是发生以下情况:

  • 输入新的搜索字词:清除列表,删除项目[确定]
  • 响应从服务器[OK]
  • 返回
  • 我将所有项目添加到列表中,并通知适配器有关更改[确定]
  • 的信息
  • 几分之一秒,旧值出现在列表中,只有在[不行]
  • 之后才会使用新值更新列表项

据我了解,这是因为<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;效果,我做错了什么?

由于

1 个答案:

答案 0 :(得分:8)

呼叫

mBinding.executePendingBindings ();

mBinding.setData(data);

之后