如何使用数据绑定更改按钮的文本

How to change the text of a button using databinding

这应该很简单,但我 运行 遇到了问题。我正在尝试根据列表是降序还是升序来更改按钮的文本。这就是我所拥有的:

In my view model:

fun ascendingDescending() {
    if (ascendingOrDescending == AscendDescend.ASC) {
        ascendingOrDescending = AscendDescend.DESC
        isAscend = false
    } else {
        ascendingOrDescending = AscendDescend.ASC
        isAscend = true
    }

    val searchAndSort = searchQuery.value
    searchAndSort?.ascendDescend = ascendingOrDescending
    searchQuery.postValue(searchAndSort)

}

In my .xml file:

    <com.google.android.material.button.MaterialButton
        android:id="@+id/btnAscendDescend"
        android:layout_width="0dp"
        android:layout_height="45dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="10dp"
        android:backgroundTint="@color/colorPrimary"
        app:layout_constraintHorizontal_weight="1"
        app:layout_constraintEnd_toStartOf="@+id/btnFilterBy"
        app:layout_constraintStart_toEndOf="@+id/btnSortBy"
        app:layout_constraintTop_toBottomOf="@+id/guideline"
        app:layout_constraintHorizontal_chainStyle="spread"
        android:text="@{viewModel.isAscend ? @string/work_packages_descend : @string/work_packages_ascend}"
        android:onClick="@{() -> viewModel.ascendingDescending()}"
        />

当我单击按钮时,文本没有从降序变为升序。

能否在创建绑定后添加 binding.lifecycleOwner = this。 并使 sur 将 isAscend 设为 MutableLiveData。

在xml文件中

<androidx.appcompat.widget.AppCompatButton
                    android:id="@+id/btnLogin"
                    android:layout_height="wrap_content"
                    android:layout_width="match_parent"                        
                    android:text='@={loginViewModel.loginText}' /> 

在视图模型中

  var loginText = ObservableField("Login")      
    if(phoneNumber.length>1){    
    loginText.set(context.getString(R.string.getOtp))          
    }    
    else{    
     loginText.set(context.getString(R.string.login))    
    }

创建绑定后,为片段中的双向绑定初始化 lifecycleOwner 和 viewModel。

binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel

假设您当然已经在 gradle 文件中设置了正确的属性。