Как установить кнопку переключения на основе того, что в моей ViewModel - PullRequest
0 голосов
/ 21 апреля 2020

В моем приложении есть viewModel, а в моем файле activity_main. xml есть простая кнопка переключения, которая включает или выключает что-то. При нажатии этой кнопки я установил значение включения / выключения в моей модели представления. Я просто хочу, чтобы состояние этой кнопки было связано с этой переменной внутри viewModel. Например, если другой фрагмент или фрагмент кода обновляет значение в viewModel, я хочу, чтобы оно тоже было привязано к этой кнопке включения / выключения.

Я вижу что-то о привязке или что-то подобное в файле xml android:checked="@{userModel.unitsChecked}" но я не вижу, как он знает, как получить экземпляр моей модели представления (называемой userModel).

Как правильно сделать это в Android land?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

В вашей userModel, объявите unitsChecked как LiveData. Затем в вашем xml установите unitChecked следующим образом: android: checked = "@ {userModel.unitsChecked} Затем обновите ваши LiveData с помощью unitsChecked.value = true

0 голосов
/ 21 апреля 2020

ViewBinding - это автоматически генерируемый класс, который решает проблему использования FindViewById () во всей вашей кодовой базе. Он также обеспечивает двустороннюю привязку, если это необходимо. Чтобы включить привязку вида, включите ее в своем проекте, как показано ниже:

// Available in Android Gradle Plugin 3.6.0
android {
    viewBinding {
        enabled = true
    }
}

Для Android Studio Canary Версия:

// Android Studio 4.0
android {
    buildFeatures {
        viewBinding = true
    }
}

Затем, когда вы создадите приложение, каждый макет будет автоматически создан файл привязки. Если ваш файл макета имеет имя Activity_main.xml, то генерируется файл MainActivityBinding, который вы можете использовать в вашей viewModel.

Теперь вы можете использовать этот класс привязки внутри вашей viewModel, чтобы получить ваши представления и установить их свойства:

// Using view binding in an Activity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding = ActivityMainBinding.inflate(layoutInflater)

    binding.title.text = "Hello"
    binding.subtext.text = "Concise, safe code"
    binding.button.setOnClickListener { /* ... */ }

    setContentView(binding.root)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...