android - 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();
}
解决方案
对您的绑定进行一些更改并不意味着它会对您的View
. 更改绑定中的内容意味着您实际上是在安排这些更改在最近的将来应用。这有很多原因,性能就是其中之一。
想象一下,您的 xml 中有一些复杂的表达式。在设置所有绑定变量之前,您不想弄清楚与绑定变量相关的所有内容。那将是浪费资源。
您可以在生成的绑定 java 类本身中看到更多关于它的信息。我建议你通读一遍。
调用executePendingBindings
意味着您实际上是在强制框架在调用它的那一刻做到目前为止它需要在绑定上做的所有事情。
如果您的情况不需要,您不必在适配器中执行此操作。有些人这样做是为了确保在继续之前在项目上正确设置所有内容。onBind
因此,例如,在上一轮绑定执行之前,没有像再次被调用的情况......或类似的东西......
编辑1:
另外......不要忘记执行更改的调度(在最近的将来)是允许您setVariables
从binding
不同于UI
线程的线程开始的事情。因为设置变量不会触及View
自身。
编辑2:
查看生成的 java 类的最简单方法是:
- 导航 -> 文件
- 在 UpperCamelCase 中键入绑定文件的名称,然后键入
Binding
(例如,如果您的布局是activity_main
,请键入ActivityMainBinding
)
推荐阅读
- ios - 从xcode中的注释映射访问结构参数
- java - SpringBoot程序中如何为mysql动态设置sql_mode?
- mysql - 使用 phpmyadmin 运行时插入查询语法错误
- r - 使用 rstanarm 包中的 stan_aov 缺少预测变量计算贝叶斯方差分析
- android - 如何在Android中显示较小的第二个布局保持可见的主要布局?
- azure - azure b2c 和应用服务中客户端密码和重定向 URI 和应用的用途是什么
- babeljs - Eslint 允许基于 glob 模式的多个解析器
- sql-server - 通过sql diff工具比较两个表时,参数数据类型xml对len函数的参数1无效
- primefaces - 对 PrimeFaces SelectOneMenu 上的 noSelectionOption 应用不同的样式
- python - 如何使用视图模型保存获取请求的值