Цвет привязки базы данных ViewModel - PullRequest
1 голос
/ 27 июня 2019

Я хочу отображать состояние моего приложения в цвете ConstraintLayout. Мое приложение одноразовое и использует MVVM.

private val _status = NonNullMutableLiveData(NacinDelaEnum.OFFLINE)
val status:LiveData<NacinDelaEnum>
        get()=_status

В зависимости от значения status Я хотел бы раскрасить фон ConstraintLayout.

NacinDelaEnum - это просто простой перечислимый класс

enum class NacinDelaEnum {
ONLINEEXT,ONLINEINT,OFFLINE
}

Когда пользователь запускает приложение, я пингуюсь изнутри, затем из внешнего и, в зависимости от этого, меняю значение _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"/>

Полагаю, мое преобразование неверно Как я мог это сделать?

Спасибо

1 Ответ

0 голосов
/ 27 июня 2019

А как насчет использования 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)
}
...