android - ViewModel 数据绑定(bind)背景色

标签 android mvvm android-databinding android-viewmodel

我想将我的应用程序的状态显示为 ConstraintLayout 的颜色。我的应用程序是单一 Activity 并使用 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 直接应用于 View 怎么样?

@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)
}

关于android - ViewModel 数据绑定(bind)背景色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56786259/

相关文章:

android - 在 Android 中使用 YouTube Data API v3 可恢复 YouTube 上传

android - 如何在 ArrayAdapter 的列表开头添加对象?

C# - 来自数据库的 WPF/WP 绑定(bind) - 正确的方法? MVVM

c# - MVVM Light Call 属性更改的异步方法?

android - DataBindingUtil 将布局膨胀为空

android - 是否可以将 androidx-navigation 与 onClick-databinding 一起使用,而无需在 fragment 中编写锅炉代码?

安卓 Facebook 分享不工作

android - 拉动以刷新android中的水平 ListView

c# - 当我从 ListView 中选择项目并在WPF的UI中单击添加按钮时,如何将项目添加到列表中

android - 如何使用数据绑定(bind)调用静态方法?