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 结束时调用它
最近我一直在使用数据绑定,并且遇到了 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 结束时调用它