Android 为什么在 RecyclerView 中使用 executePendingBindings

Nic*_*ick 23 android android-recyclerview android-databinding

我最近一直在使用数据绑定,并且遇到了该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();


}
Run Code Online (Sandbox Code Playgroud)

Bar*_*ski 20

这样做对你绑定了一些变化,并不意味着它将有一个直接的对你的影响View。在绑定中更改内容意味着您确实在安排在最近的将来应用这些更改。这有很多原因,性能就是其中之一。

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

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

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

你不必须做在你的适配器,如果您的情况不要求。有些人这样做是为了确保在继续之前在项目上正确设置了所有内容。因此,例如,onBind在执行上一轮绑定之前,不会再调用一次这样的情况……或类似的……


编辑 1:

另外,不要忘记执行的变化(最近的未来)的调度被,让您的东西setVariablesbinding,从比不同的线程UI的线程。因为设置一个变量不会触及它View本身。


编辑2:

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

  1. 导航 -> 文件

导航文件

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

活动主绑定