首页 > 解决方案 > 使用 LiveData 设置 TextView 的可见性

问题描述

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

使用本文档和一些 SO 帖子,我已经了解到您应该正确对齐您的 observable (LiveData) 的 getter,以便返回类型与您要设置的 View 属性的 setter 预期的类型相匹配。具体来说:

使用这些见解,在我的 ViewModel 类中,我定义了:

MutableLiveData<Boolean> textHintVisible;

按下按钮后,我将此值设置为 False:

textHintVisible.postValue(false);

(注意,我也试过用 setValue())

然后,在我的布局 XML 中,我包括:

<TextView
   android:visibility="@{(safeUnbox(viewModel.textHintVisible) ? View.VISIBLE : View.GONE)}"
/>

但是,我的 TextView 始终可见。为了调试,我在我的活动中添加了一个观察者,这证实了我的布尔值在真假之间正确切换:

mHintsViewModel.getTextHintVisible().observe(this, new Observer<Boolean>() {
   @Override
   public void onChanged(@Nullable Boolean newInt) {
        Log.i(TAG,"onChanged: "+newInt);
   }
});

但我的 TextView 始终可见。我究竟做错了什么?是否不可能为此使用 LiveData?我应该使用额外的转换器吗?或者我的代码原则上是正确的,但这是 Android Studio 中的错误吗?任何帮助深表感谢。

标签: androidmvvmandroid-databinding

解决方案


我想到的一件事是-您是否将绑定设置为观察 liveData?根据文档,您必须设置绑定布局以观察生命周期binding.setLifecycleOwner(this)


推荐阅读