Android DataBinding布局XML中equals返回false致RadioButton无法选中
核心原因
在Data Binding表达式中,@string/bread直接引用的是字符串资源的整数ID,而非字符串的实际内容。而viewModel.accompaniment.name是字符串类型,整数和字符串调用equals()必然返回false,导致RadioButton无法被选中。
解决方案
方案1:在布局中通过Context获取字符串实际内容
修改Data Binding表达式,使用context.getString()获取字符串资源的真实值后再进行比较:
android:checked="@{viewModel.accompaniment.name.equals(context.getString(@string/bread))}"
若布局的<data>标签未导入Context,需添加导入语句:
<data> <import type="android.content.Context" /> <!-- 其他导入或变量定义 --> </data>
方案2:在ViewModel中统一字符串来源
在ViewModel初始化或赋值accompaniment.name时,直接使用应用上下文获取字符串资源的值,确保后续比较的是相同类型的字符串内容:
// 在ViewModel中(需持有Context或通过Application获取) val breadString = context.getString(R.string.bread) accompaniment.name = breadString
此时布局中的表达式可简化为:
android:checked="@{viewModel.accompaniment.name.equals(@string/bread.toString())}"
这种方式避免了在布局中依赖Context,更符合MVVM的职责分离原则。
额外检查点
- 确认
viewModel.accompaniment.name确实被正确赋值为目标字符串(可通过Log打印验证) - 确保所有RadioButton的表达式都使用了正确的字符串资源,没有拼写错误
内容的提问来源于stack exchange,提问作者ErikaEmma
相关产品推荐
相关产品推荐

