如何在module中使用butterknife
在工程里新建了一个module,在该module依赖了butterknife,但是运行时报错"attribute value must be constant",去github官网上查了下,https://github.com/JakeWharton/butterknife。
原来如果在子模块中依赖的话,dependence需要修改,
在项目的工程gradle里添加
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.1'
}
在module的gradle顶部添加
apply plugin: 'com.jakewharton.butterknife'
最后别忘了rebuild project,然后在module中,把R.id都替换成R2.id。
在子模块中点击事件onClick无法工作
刚解决完在子模块中使用的问题,马上又踩入另一个坑,onClick无法工作,按常规写法
@OnClick({R2.id.btn_search, R2.id.btn_add, R2.id.btn_delete, R2.id.btn_update})
public void onViewClicked(View view) {
switch (view.getId()) {
case R2.id.btn_search:
break;
case R2.id.btn_add:
break;
case R2.id.btn_delete:
break;
case R2.id.btn_update:
break;
}
}
发现点击时无法进入到case里,打印后发现view.getId和R2.id对不上,非常神奇,但是无可奈何。
在github上找了半天,有不少类似案例 https://github.com/JakeWharton/butterknife/issues/762
均未找到合适的解决办法,最后不得已,把onViewClicked方法拆分成
@OnClick({R2.id.btn_search})
public void onSearchClicked(View view) {
}
@OnClick({R2.id.btn_add})
public void onAddClicked(View view) {
}
@OnClick({R2.id.btn_delete})
public void onDeleteClicked(View view) {
}
@OnClick({R2.id.btn_update})
public void onUpdateClicked(View view) {
}
至少可以跑通了。