Android中使用Room数据库并继承BaseObservable时为何要用@Bindable?
@Bindable注解:Room + BaseObservable场景下的作用与原因
核心定义
@Bindable是Android Data Binding库提供的注解,让被标记的属性同时满足两个核心需求:
- 支持Data Binding的双向绑定与UI自动刷新
- 被Room数据库识别为合法的持久化字段
为什么必须用?
- 继承
BaseObservable时,这个类是Data Binding实现属性变更通知的基础。@Bindable会自动为标记的getter生成BR类中的对应常量,调用notifyPropertyChanged(BR.xxx)时,就能触发UI自动刷新绑定的属性值。 - Room需要识别实体类中要持久化的字段,
@Bindable标记的属性,Room会正常将其映射为数据库列;如果不用这个注解,Room可能无法正确识别被Data Binding逻辑包装的属性,导致持久化失败,同时Data Binding也无法监听属性变化,UI不会同步更新。
简单示例
@Entity(tableName = "user") class User : BaseObservable() { @PrimaryKey(autoGenerate = true) var id: Int = 0 @Bindable var name: String = "" set(value) { field = value notifyPropertyChanged(BR.name) // 触发UI更新 } }
内容的提问来源于stack exchange,提问作者Hussain Ashraf
相关产品推荐
相关产品推荐

