我正在使用数据绑定来使用三元语法在TextView上显示文本.

android:text="@{vm.value.firstValue != null ? vm.value.firstValue.toString() : @string/source1}"

This code displays @string/source1 upon first loading of a fragment before the vm.value completely being loaded by network call. Then, it display vm.value.firstValue when the network call succeeds. However, I want to display the @string/source1 only when network call fails.
I wonder if it is okay to display nothing(keep it empty) while waiting for the network call to be done successfully. then, populate TextView based on if a network call success or not. If this sounds okay, I would like to know how to acheive that using databinding.

推荐答案

数据绑定框架不能区分由于加载尚未完成而导致的null值和作为加载后结果的null值.因此,您必须自己实现这样的识别逻辑.

您可以在您的ViewModel中引入一个新的isLoading布尔值.无论何时触发加载操作,请设置isLoading=true,加载完成后,请设置isLoading=false.然后在您的XML中使用以下条件:

android:text="@{vm.isLoading ? (@string/textIsLoading) : (vm.value.firstValue != null ? vm.value.firstValue.toString() : @string/source1)}"

您可能可以进一步简化上面的语句,如下所示:

android:text="@{vm.isLoading ? (@string/textIsLoading) : (vm.value.firstValue ?? @string/source1)}"

有关??运算符的说明,请参见this StackOverflow question.


如果不想在ViewModel中创建新的布尔变量,还可以将value.firstValue变量初始化为加载时显示的默认字符串:

value.firstValue = "Text is loading..."  // replace with R.string later

当加载文本失败时,只需设置

value.firstValue = null

然后在您的XML中使用以下语句:

android:text="@{vm.value.firstValue ?? @string/source1}"

Android相关问答推荐

在Android中点击滑动时触发的手势

derivedStateOf与使用key和MutableState记住

在以XML格式设置完整屏幕视图时可见App Compat按钮

如何在Jetpack Compose中向SearchBar添加边框

Camera2 将图像从 ImageReader 传递到 MediaRecorder

如何禁用自动登录 google play games services android unity?

将 React Native 应用程序背景带到前台

compose 导航参数字符串包含花括号?

获取 ArithmeticException:除以零,但我没有在任何地方除以零

根据 Jetpack Compose 中的生命周期正确处理变量/函数

使用 Room 在 SQLite 中保存复杂的 JSON 响应

如何使用文件提供程序将视频从一个应用程序共享到另一个应用程序?

Android Studio:如何添加应用程序质量洞察窗口以查看 Android Studio 中的 Crashlytics 数据?

如何将新的 ComponentActivity 与 ViewBinding 和其他旧的 AppCompatActivity 组件一起使用

Android Material Date Range Picker - 如何仅更改所选范围日期的文本 colored颜色 ?

Android 应用程序在启动时自动启动

Jetpack Compose 中的按钮上的文本未更新

Сan 无法从 Firestore 获取数据,没有错误

ObjectBox,如何在冲突中放弃一切迁移?

如何设置 Android Auto 媒体应用按钮 colored颜色