android - 使用 LiveData 设置 TextView 的可见性
问题描述
我想使用 LiveData 切换 TextView 的可见性。还有一些其他关于使用数据绑定设置可见性的帖子,但这些使用 Observables,而我想利用(更新的)LiveData。特别是,使用 LiveData。
使用本文档和一些 SO 帖子,我已经了解到您应该正确对齐您的 observable (LiveData) 的 getter,以便返回类型与您要设置的 View 属性的 setter 预期的类型相匹配。具体来说:
- View 的 setVisibility() 需要一个 int,而我有一个 LiveData 成员(所以我的 ViewModel 中的 getter 也将返回这种类型)
- 可以使用三元运算符将此布尔值转换为 View.VISIBLE 和 VIEW.GONE。我还应该在我的 XML 表达式中添加 safeUnbox() 以使其成为原始布尔值
使用这些见解,在我的 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 中的错误吗?任何帮助深表感谢。
解决方案
我想到的一件事是-您是否将绑定设置为观察 liveData?根据文档,您必须设置绑定布局以观察生命周期binding.setLifecycleOwner(this)
推荐阅读
- powershell - Replace lines containing special characters in Powershell
- alteryx - 运行命令说明打开和保存excel文件
- python - 使用库时 API Key 无法访问 Django 中的视图:Django REST Framework API Key
- r - 如何在冲积或桑基图中获得 y 轴上的百分比?
- r - 如何在 map2 函数 (purrr) 中对列进行子集化,以便向量长度一致?
- c++ - 为什么 std::stable_sort() 的比较器函数的参数必须设置为常量?
- php - HTML代码转换为PHP并与html合并
- c++ - 如何将**ptr的第N个元素分配给变量?
- ffmpeg - 如何为特定(一组)文件找到最佳 FFmpeg libx265 编码设置
- android-studio - 如何在 Android Studion 中单击 Webview 应用程序上的链接后打开社交媒体应用程序