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

Android Data Binding报错:Cannot Resolve Method setUser问题排查

Android Data Binding 报错「Cannot resolve method setUser()」的解决办法

问题根源

你在布局文件的<data>块里定义的变量名为viewmodel,但在MainActivity里调用了binding.setUser(user)——Data Binding框架会根据你定义的变量名生成对应的setter方法,也就是setViewmodel(),而非和类名关联的setUser(),这就是报错的核心原因。

两种解决方案

方案1:修改Activity中的调用代码

把MainActivity里的binding.setUser(user)替换为binding.setViewmodel(user),保持和布局文件的变量名一致:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 移除重复的setContentView,DataBindingUtil已处理布局加载
    // setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    user = new User("JJJJ");
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

    // 修改为对应变量名的setter方法
    binding.setViewmodel(user);
    ...
}

方案2:修改布局文件的变量名

把布局文件中<variable>的name属性从viewmodel改成user,这样Activity里的binding.setUser(user)就能正常使用:

<data>
    <variable name="user"
        type="com.craigwashere.Wyse60.User"
        />
</data>

同时同步修改布局中变量引用的地方:

<TextView
    android:text="@{user.name}"
    ...
/>

关于生成文件的说明

你提到的生成文件未显示的问题,是因为Android Studio默认不展示build目录下的生成文件。可以切换Project视图到「Project Files」模式,或者直接导航到build/generated/data_binding_base_class_source_out/debug/out/[你的包名]/databinding/目录,就能找到自动生成的ActivityMainBinding.java,里面会看到对应变量名的setter方法。

内容的提问来源于stack exchange,提问作者craigwashere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:49