我正在使用数据绑定来使用三元语法在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相关问答推荐

写入排除例外以进行依赖性判断

如何使用喷气背包压缩让Animated Image Vector每次动画化一条路径?

Android可组合继承?

如何在Reaction Native中显示Google Map iFrame?

在Android中使用Room从SQlite数据库中获取实体列表的正确方式是什么?

android回收器查看点击事件无响应

activity在 Runnable 中如何工作?我的 Android 表格未显示

Color.Transparent 和 Color.Unspecified 之间的区别

闪屏 API 无法在 Android 12 上运行(API 31、32)

有没有办法让协程通道在接收时遵循特定的顺序而不是先进先出

如何避免多次调用 Jetpack Compose 的 onClick 回调

Android CompanionDeviceManager 永远找不到任何附近的蓝牙设备

如何在 BottomBar jetpack compose 中删除选定的椭圆项目 colored颜色

我的观点在jetpack compose中相互重叠

Jetpack Compose 重组竞争条件

使用 capacitor cordova 插件的 Android Studio 错误

如何在 Android Studio 中创建新的可组合函数?

Android Studio Emulator Internet 连接问题仅是第一次

如何使用 Kotlin 在 Android Wear(Galaxy watch 4)中继续在后台运行应用程序

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