我想以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"/>
我猜我的翻译不对。我该怎么做?
谢谢
答案 0 :(得分:0)
使用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)
}