我遇到了一个我以前见过的特殊问题,但现在根本无法解决。
我正在使用DataBinding和Lifecycle对象(所以ViewModel和LiveData),并且有一个屏幕,根据状态,我必须显示多个标签。它们作为资源存储,带有数字标识符(例如@string/label_1
,@string/label_2
等)。这样我只需在ViewModel中增加一个LiveData<Int>
计数器,视图就会自动更新。
在我之前的一个项目中,这已经到位了,但不幸的是我没有注意它是如何被执行的。而现在我根本找不到解决方案。
有没有办法在运行时动态组合资源ID进行绑定?
你可以使用Transformations.map。例如。
private val state = MutableLiveData<State>()
val identifier: LiveData<Int> = Transformations.map(state) {
when (it) {
stateA -> R.string.label_1
else -> R.string.label_2
}
}
每当你打电话给state.value =
或state.postValue()
时,地图再次被召唤