Android 为什么/何时使用 ExecutePendingBindings

Android Why/ when to use ExecutePendingBindings

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

executePendingBindings() 功能为立即绑定。

当变量或可观察对象发生变化时,绑定计划在下一帧之前发生变化。然而,有时必须立即执行绑定。要强制执行,请使用 executePendingBindings() 方法。

这就像优化建议。它强制数据绑定立即执行,这允许 RecyclerView 进行正确的视图大小测量

更详细的解释可以参考这个例子

当不使用 executePendingBindings() 时,您的列表会在您绑定时闪烁,例如,当您打开一个新列表时,您会注意到这种闪烁/抖动效果,这是因为列表已填充,然后在下一帧它是绑定的。

如果您不希望这种情况发生并立即执行,您绑定此方法将防止闪烁并立即绑定您的数据。

这里有一个例子没有executePendingBindings()

如果您看到,会出现闪烁效果,因为视图已初始化,然后数据绑定,然后在下一帧中发生视图绑定。

这里是executePendingBindings()

看到这里,没有闪烁效果,可以看到列表正常绑定,一气呵成

你只能在UI线程上使用executePendingBindings(),这意味着在调用onBindViewHolder时,你需要在绑定上使用它,这样做会保证您在 UI.

上调用它
override fun onBindViewHolder(binding: MyBindingClass, position: Int, viewType: Int) {
        //Your binding code
        binding.executePendingBindings()
    }

总是在 onBindViewHolder 结束时调用它