渲染时 Android 数据绑定(bind)滞后

标签 android data-binding

我正在使用带有 RecyclerView.Adapter 的 Android 数据绑定(bind)。 在 AdapteronCreateViewHolder 上,我调用:

public TransfersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new MyViewHolder(
                ListItemMyDataBinding.inflate(
                        LayoutInflater.from(parent.getContext()),
                        parent,
                        false));
}

所以 ListItemMyDataBindinglist_item_my_data.xml 的表示。

AdapteronBindViewHolder 看起来像这样:

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    MyData myData = mDataList.get(position);

    holder.render(myData);

    ....
}

最后,我的 MyViewHolderrender 函数如下所示:

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}" />

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

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

  • 输入了新的搜索词:列表已清除,项目已删除[确定]
  • 响应从服务器返回 [OK]
  • 我将所有项目添加到列表中并通知适配器有关更改 [OK]
  • 有几分之一秒的时间,旧值出现在列表中,列表项将仅在此之后更新为新值 [不正常]

据我了解,这是因为 View 被重用,作为第一步,适配器意识到它可以重用 View 并显示它,并且仅在它之后(几分之一秒)应用布局中的更改(通过数据绑定(bind)),这就是我看到旧值闪烁的原因。这很烦人。 如果在函数 render 中我手动为 View 设置默认值(例如 TextView 上的 setText("")),那么我看不到闪烁效果,但这不是我想要的解决方案。

你有什么建议我怎样才能很好地避免这种“闪烁/滞后”效果,我做错了什么?

谢谢

最佳答案

打电话

mBinding.executePendingBindings ();

就在 mBinding.setData(data); 之后

关于渲染时 Android 数据绑定(bind)滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021777/

相关文章:

android - 如何在线性布局顶部绘制边框

c# - MVVM 绑定(bind)问题 - 另一个菜鸟问题

android - 菜单作为android listview的数据源?

spring - 使用 Formatter 时如何防止 Spring 使用默认转换逻辑

PHP/MySQLi - 如何获取一行的值并将其存储在变量中?

c# - 将附加数据值传递给 ASP.NET MVC 中的强类型分部 View

Spring MVC : @RequestBody VS @ModelAttribute

android - 是否有任何 Android 函数调用只进行一两个特定的系统调用?

构建apk后找不到Java静态接口(interface)方法

android - 如何防止 Snackbar 关闭?