0

老实说,我尝试了很多,但没有成功。

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
}

where 函数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扩展功能在哪里

请帮我

4

1 回答 1

0

就我而言,当用户进入应用程序时,我加载了一些数据,此时进度条应该是可见的。我也用了一个Koin,分别通过它来初始化HomeViewModel,变量showProgressBarUserInfo的默认值为“false”。显然,在进入saveUserInfo()函数的那一刻,函数的调用getSomeOtherData()执行得如此之快,以至于 ProgressBar 的状态之间的切换是不可见的。

我通过添加解决了我的问题

init {
    showProgressBarUserInfo.value = true
}

在我的HomeViewModel顶部

android:visibility="@{vm.showProgressBarUserInfo ? View.VISIBLE : View.GONE}"
于 2020-08-01T14:14:37.570 回答