我在我的应用程序中使用数据绑定.我有一个应用程序模块,数据绑定工作成功.
但是,我也有一个'家庭模块'我试图使用相同的技术,但数据绑定在xml中出错,具有以下内容:
错误:(63,34)没有指定资源类型(在'onClick'上,值为'@ {viewModel :: onButtonClicked}').
我发现这个错误报告表明这是一个问题,但它已被修复.
我看不出代码有任何问题,我认为问题是因为它在库模块中.
我能做些什么才能让它发挥作用?
家里模块
activity_home.xml
HomeActivity
public class HomeActivity extends AppCompatActivity { private HomeViewModel mHomeViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); final CustomSensorManager customSensorManager = new CustomSensorManager(sensorManager); mHomeViewModel = new HomeViewModel(customSensorManager); setBindingContentView(R.layout.activity_home); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); } private void setBindingContentView(@LayoutRes int layoutResID) { ActivityHomeBinding binding = DataBindingUtil.setContentView(this, layoutResID); binding.setViewModel(mHomeViewModel); } }
HomeViewModel
public class HomeViewModel { private CustomSensorManager mSensorManager; public HomeViewModel(@NonNull CustomSensorManager sensorManager) { mSensorManager = sensorManager; } public void onButtonClicked(View view) { mSensorManager.scan(true); } }
的build.gradle
apply plugin: 'com.android.library' android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dataBinding { enabled = true } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:25.0.0' compile 'com.android.support:design:25.0.0' compile 'com.android.support.constraint:constraint-layout:+' }
更新:
可能是一个错误.链接
我的问题:
引擎模块没有UI,因此错过了依赖性,现在很有意义.
假设您的应用中有这样的多级模块层次结构:
为了将数据绑定工作到模块A,您必须确保在从根模块到模块A 的整个层次结构中启用数据绑定.
这意味着你必须添加:
dataBinding { enabled = true }
到模块:
应用模块
模块A.
模块B.
重要的是要记住,您还必须启用数据绑定module B
,因此涵盖所有路径.