You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android DataBinding布局XML中equals返回false致RadioButton无法选中

问题解决:RadioButton的checked属性equals判断始终返回false

核心原因

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:45:40