这应该很简单,但是我遇到了问题。我试图根据列表是以降序还是升序更改按钮的文本。这就是我所拥有的:
在我的视图模型中:
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()}"
/>
当我单击按钮时,文本没有从降序更改为升序。
答案 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 文件中设置了正确的属性。