如何解决如何将数据绑定与 ROOM Android 提供的 livedata 一起使用?
我正在尝试将我的 XML 布局直接与 ROOM 数据库提供的实时数据进行数据绑定。但是我看到查询是无限执行的,并且在 XML 中没有收到任何值。
这是我的代码结构。
我在 DataDao
类中的 ROOM API
getMyData(): LiveData<Model?>
我的 XML 视图
<com.google.android.material.card.MaterialCardView
android:id="@+id/some_card_view"
style="@styles/CardStyle"
app:layout_constraintBottom_toBottomOf="parent"
android:visibility="@{viewModel.dataProvider.getMyData()!=null ? View.VISIBLE : View.GONE}"/>
这里我只是想在房间提供的数据不为空的情况下显示这张卡片。否则显示。但在日志中,我看到它不断查询数据库,我可以看到打印在 dataProvider
类的方法中的日志。
我在这里做错了什么吗?有没有其他方法可以直接在 XML 数据绑定中处理来自房间的实时数据?
解决方法
在您的 viewModel 中创建一个对象:
val myData : LiveData<Model?> = dataProvider.getMyData()
接下来,您可以将其映射到所需的条件字段
val canShowSomeCardView = Transformations.map(myData) {
it != null
}
所以现在你可以在你的 xml 中操作 bool 了。 我建议为这些事情创建一个绑定适配器:
@JvmStatic
@BindingAdapter("bindVisibleGone")
fun bindVisibleInvisible(view: View,isVisible: Boolean?) {
view.visibility = if (isVisible == true) View.VISIBLE else View.GONE
}
现在在您的 xml 中:
app:bindVisibleGone="@{viewModel.canShowSomeCardView}"
如果这有帮助,请告诉我
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。