使用 LiveData 设置 TextView 的可见性
Using LiveData to set visibility of TextView
我想使用 LiveData 切换 TextView 的可见性。还有一些关于使用数据绑定设置可见性的其他帖子,但这些帖子使用 Observables,而我想利用(更新的)LiveData。特别是,使用 LiveData。
使用 this documentation 和一些 SO 帖子,我已经了解到您应该正确对齐可观察对象 (LiveData) 的 getter,以便 return 类型与setter 期望的类型,用于您要设置的 View 属性。具体来说:
- View 的 setVisibility() 需要一个 int,而我有一个 LiveData 成员(因此我的 ViewModel 中的 getter 也将 return 这种类型)
- 可以使用三元运算符将此布尔值转换为 View.VISIBLE 和 VIEW.GONE。我还应该在我的 XML 表达式中添加 safeUnbox() 以使其成为原始布尔值
利用这些见解,在我的 ViewModel class 中,我定义了:
MutableLiveData<Boolean> textHintVisible;
按下按钮后,我将此值设置为 False:
textHintVisible.postValue(false);
(注意,我也尝试过 setValue())
然后,在我的布局 XML 中,我包含了:
<TextView
android:visibility="@{(safeUnbox(viewModel.textHintVisible) ? View.VISIBLE : View.GONE)}"
/>
但是,我的 TextView 始终可见。为了调试,我在我的 activity 中添加了一个观察者,这确认我的布尔值在 true 和 false 之间正确切换:
mHintsViewModel.getTextHintVisible().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(@Nullable Boolean newInt) {
Log.i(TAG,"onChanged: "+newInt);
}
});
但是我的 TextView 始终保持可见。我究竟做错了什么?不可能为此使用 LiveData 吗?我应该使用额外的转换器吗?或者我的代码原则上是正确的,但这是 Android Studio 中的错误吗?非常感谢任何帮助。
我想到的一件事是 - 您是否设置了绑定以观察 liveData?根据 documentation,您必须设置绑定布局以观察生命周期 binding.setLifecycleOwner(this)
我想使用 LiveData 切换 TextView 的可见性。还有一些关于使用数据绑定设置可见性的其他帖子,但这些帖子使用 Observables,而我想利用(更新的)LiveData。特别是,使用 LiveData。
使用 this documentation 和一些 SO 帖子,我已经了解到您应该正确对齐可观察对象 (LiveData) 的 getter,以便 return 类型与setter 期望的类型,用于您要设置的 View 属性。具体来说:
- View 的 setVisibility() 需要一个 int,而我有一个 LiveData 成员(因此我的 ViewModel 中的 getter 也将 return 这种类型)
- 可以使用三元运算符将此布尔值转换为 View.VISIBLE 和 VIEW.GONE。我还应该在我的 XML 表达式中添加 safeUnbox() 以使其成为原始布尔值
利用这些见解,在我的 ViewModel class 中,我定义了:
MutableLiveData<Boolean> textHintVisible;
按下按钮后,我将此值设置为 False:
textHintVisible.postValue(false);
(注意,我也尝试过 setValue())
然后,在我的布局 XML 中,我包含了:
<TextView
android:visibility="@{(safeUnbox(viewModel.textHintVisible) ? View.VISIBLE : View.GONE)}"
/>
但是,我的 TextView 始终可见。为了调试,我在我的 activity 中添加了一个观察者,这确认我的布尔值在 true 和 false 之间正确切换:
mHintsViewModel.getTextHintVisible().observe(this, new Observer<Boolean>() {
@Override
public void onChanged(@Nullable Boolean newInt) {
Log.i(TAG,"onChanged: "+newInt);
}
});
但是我的 TextView 始终保持可见。我究竟做错了什么?不可能为此使用 LiveData 吗?我应该使用额外的转换器吗?或者我的代码原则上是正确的,但这是 Android Studio 中的错误吗?非常感谢任何帮助。
我想到的一件事是 - 您是否设置了绑定以观察 liveData?根据 documentation,您必须设置绑定布局以观察生命周期 binding.setLifecycleOwner(this)