首页 > 解决方案 > Android 为什么在 RecyclerView 中使用 executePendingBindings

问题描述

我最近一直在使用数据绑定,并且遇到了这种executePendingBindings方法。该文档几乎没有显示它,我无法理解它是如何工作的或何时使用它。

许多开发人员在 onBindViewHolder 回调中使用 executePendingBindings,但我自己在使用或不使用时在回收器中没有看到任何差异。

有人可以解释为什么它在回收站中使用很重要吗?谢谢

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

            Customer customer= List.get(position).second;
            ((CustomerViewHolder)holder).binding.setCustomer (customer)

            ((CustomerViewHolder)holder).binding.executePendingBindings();


}

标签: androidandroid-recyclerviewandroid-databinding

解决方案


对您的绑定进行一些更改并不意味着它会对View. 更改绑定中的内容意味着您实际上是在安排这些更改在最近的将来应用。这有很多原因,性能就是其中之一。

想象一下,您的 xml 中有一些复杂的表达式。在设置所有绑定变量之前,您不想弄清楚与绑定变量相关的所有内容。那将是浪费资源。

您可以在生成的绑定 java 类本身中看到更多关于它的信息。我建议你通读一遍。

调用executePendingBindings意味着您实际上是在强制框架在调用它的那一刻做到目前为止它需要在绑定上做的所有事情。

如果您的情况不需要,您不必在适配器中执行此操作有些人这样做是为了确保在继续之前在项目上正确设置所有内容。onBind因此,例如,在上一轮绑定执行之前,没有像再次被调用的情况......或类似的东西......


编辑1:

另外......不要忘记执行更改的调度(在最近的将来)是允许您setVariablesbinding不同于UI线程的线程开始的事情。因为设置变量不会触及View自身。


编辑2:

查看生成的 java 类的最简单方法是:

  1. 导航 -> 文件

导航文件

  1. 在 UpperCamelCase 中键入绑定文件的名称,然后键入Binding(例如,如果您的布局是activity_main,请键入ActivityMainBinding

activity_main_binding


推荐阅读