使用 LiveData 设置 TextView 的可见性

Using LiveData to set visibility of TextView

我想使用 LiveData 切换 TextView 的可见性。还有一些关于使用数据绑定设置可见性的其他帖子,但这些帖子使用 Observables,而我想利用(更新的)LiveData。特别是,使用 LiveData。

使用 this documentation 和一些 SO 帖子,我已经了解到您应该正确对齐可观察对象 (LiveData) 的 getter,以便 return 类型与setter 期望的类型,用于您要设置的 View 属性。具体来说:

利用这些见解,在我的 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)