android - ViewModel 数据绑定背景颜色
问题描述
我想将我的应用程序的状态显示为 ConstraintLayout 的颜色。我的应用程序是单一活动并使用 MVVM。
private val _status = NonNullMutableLiveData(NacinDelaEnum.OFFLINE)
val status:LiveData<NacinDelaEnum>
get()=_status
根据status
我想为 ConstraintLayout 的背景着色的值。
NacinDelaEnum 只是一个简单的枚举类
enum class NacinDelaEnum {
ONLINEEXT,ONLINEINT,OFFLINE
}
当用户启动应用程序时,我在内部 ping,然后在外部,并根据我更改 _status
.
如果OFFLINE
我希望背景是红色、ONLINEINT
绿色和ONLINEEXT
蓝色。
我努力了
val back: LiveData<Int> = Transformations.switchMap(_status){
someFunc(it)
}
private fun someFunc(status: NacinDelaEnum) =
when(status){
NacinDelaEnum.ONLINEINT->MutableLiveData(Color.GREEN)
NacinDelaEnum.OFFLINE->MutableLiveData(Color.RED)
NacinDelaEnum.ONLINEEXT->MutableLiveData(Color.GREEN)
}
在xml中
android:background="@{safeUnbox(viewModel.back)}"
我也有这个正确导入,因为它适用于另一个变量。
<variable name="viewModel" type="com.example.mjagrosk.viewmodels.SettingsViewModel"/>
我想我的转换是不对的。我怎么能做到?
谢谢
解决方案
使用 BindingAdapter 将 NacinDelaEnum 直接应用于视图怎么样?
@BindingAdapter("nacinDela")
fun setBackground(view: View, nacinDela: NacinDelaEnum) {
view.setBackgroundColor(view.context.getColor(getColorValue(nacinDela)))
}
fun getColorValue(nacinDela: NacinDelaEnum): Int {
when(status){
NacinDelaEnum.ONLINEINT-> MutableLiveData(Color.GREEN)
NacinDelaEnum.OFFLINE->MutableLiveData(Color.RED)
NacinDelaEnum.ONLINEEXT->MutableLiveData(Color.GREEN)
}
推荐阅读
- sql - 尝试在 ms 访问中创建具有 3 个外键的表
- rust - 编译 libpvm-rs 失败 https://github.com/cadets/libpvm-rs.git
- javascript - 检查对象数组是否包含对象
- javascript - Firestore 规则:通过 threadId 以安全的方式获取消息线程
- jenkins - 如何获取可以通过API登录jenkins的用户列表
- c++ - 为什么我可以在编译时评估接收 std::pair 的函数,但不能断言它?
- javascript - 网站如何跟踪用户在推荐页面上花费的时间?
- php - 通过连接调用 PHP 函数
- javascript - 滚动到每个循环滚动到错误部分的部分
- javascript - Laravel Ajax 更新几个选择