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

时间:2019-10-11 21:34:05

标签: android android-databinding

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

  

在我的视图模型中:

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)

}
  

在我的.xml文件中:

    <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()}"
        />

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

3 个答案:

答案 0 :(得分:1)

创建绑定后,您是否可以准确地添加binding.lifecycleOwner = this? 还要使isAscend成为MutableLiveData。

答案 1 :(得分:0)

在xml文件中

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

在viewModel中

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

答案 2 :(得分:0)

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

binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel

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