我想使用LiveData切换TextView的可见性。还有其他几篇关于设置数据绑定的可见性的文章,但是这些文章使用Observables,而我想利用(较新的)LiveData。尤其要使用LiveData。
使用this documentation和一些SO帖子,我已经了解到您应该正确对齐可观察对象(LiveData)的吸气剂,以便返回类型与setter期望的View属性类型相匹配。要设置。具体来说:
使用这些见解,我在ViewModel类中定义了:
MutableLiveData<Boolean> textHintVisible;
按下按钮后,我将此值设置为False:
textHintVisible.postValue(false);
(注意,我也尝试过使用setValue())
然后,在我的布局XML中包括:
<TextView
android:visibility="@{(safeUnbox(viewModel.textHintVisible) ? View.VISIBLE : View.GONE)}"
/>
但是,我的TextView始终可见。为了调试,我在活动中添加了一个观察者,这确认我的布尔值在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中的错误吗?非常感谢您的帮助。
答案 0 :(得分:8)
我要记住的一件事是-您是否设置了绑定以观察liveData?根据{{3}},您必须设置绑定布局以观察生命周期binding.setLifecycleOwner(this)