Я много пробовал, честно, но безуспешно.
У меня есть HomeViewModel
и некоторые данные в конструкторе:
class HomeViewModel(
val userName: MutableLiveData<String> = MutableLiveData(),
val userAvatar: MutableLiveData<String> = MutableLiveData(),
// ...
val showProgressBarUserInfo: MutableLiveData<Boolean> = MutableLiveData()
) : BaseViewModel() {
и функция saveUserInfo()
в HomeViewModel
private fun saveUserInfo(user: User) {
showProgressBarUserInfo.value = true
getSomeOtherData()
showProgressBarUserInfo.value = false
}
где функция getSomeOtherData()
также загружает имя пользователя и аватар, которые также связаны
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="vm"
type="/path/to/HomeViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
// ...
android:visibility="@{vm.showProgressBarUserInfo ? View.VISIBLE : View.GONE}" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Также я пытался создать функцию setVisibleOrGone()
(расширение или нет)
fun View.setVisibleOrGone(bool: Boolean) {
if (bool) {
this.visibility = View.VISIBLE
} else {
this.visibility = View.GONE
}
}
с аннотацией @BindingAdapter ("showOrHide") и используйте ее как
showOrHide="@{vm.showProgressBarUserInfo}"
, но все вышеперечисленное не работает.
PS данные для имени пользователя и аватара связываются успешно, но индикатор выполнения не отображается.
PSS Заголовок панели инструментов и ImageView:
app:title="@{vm.userName}"
loadAvatar="@{vm.userAvatar}"
где loadAvatar
- функция расширения
Помогите, пожалуйста