在module中依赖butterknife,报错"attribute value must be constant"

如何在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) {
    }

至少可以跑通了。

你可能感兴趣的:(在module中依赖butterknife,报错"attribute value must be constant")