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
相关产品推荐
相关产品推荐

