一、问题背景
在 ViewModel 中定义 MutableLiveData<Boolean> 变量 isVisible,并在 XML 文件中正确传入 ViewModel 的引用,在控件 TextView 的 text 属性绑定 MutableLiveData<String> text 。代码如下所示:
text = "@{vm.text}"
想实现这个效果: 在 Activity 中对 isVisible 进行监听,并在 observe 中改变实时数据变量 text 的值,从而改变控件 TextView 的显示。 但事与愿违,isVisible 发生变化的时候,TextView 控件显示的 text 却没有发生变化!利用Toast 排障后,发现text 的值发生了变化,但是却无法在 TextView 上显示。
二、解决方法
在 Activity 中监听变量 isVisible 的时候,在 observe 中改变控件 TextView 的值。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/d886a4bddae31d8286c931d773962ccc.png)
使用上述方法,可以实现这个需求:变量 isVisible 变化的时候,TextView 的值也发生变化。
三、总结
在 TextView 控件中绑定 MutableLiveData<String>变量 text。text的值发生变化的时候,TextView无法正常显示 text 的值。因为这种绑定方式 text = "@{vm.text}" 只能拿到变量 text 的地址值。