关于ButterKnife 在module中使用问题

ButterKnife 在module中使用问题

  • 说道ButterKnife 框架给我们的日常开发带来的便利,不言而喻了。在Activity、fragment、adapter等等各种情景中的使用(使用方法以及原理在此不做讲解)。但是最近在做一个组件化开发过程中,遇到一个问题,那就是在module中,它无法读取到 id,具体什么情况呢,看下下图

  • Attribute value must be constant
    什么原因呢,Attribute value must be constant
    通过追踪源码发现, @BingView(int ResId)这个参数必须是 final 修饰的常量
    而打开R文件看看区别

  • app壳子程序中的R文件:
    app壳子程序中的R文件

  • module 中的R文件:
    module 中的R文件

很明显,module 中的R资源 Id 缺少 final 修饰,而ButterKnife 注解 资源 Id时,id 必须是final 修饰。
解决方法在下

  • 1、在app壳子程序的的 build.gradle中加入:
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'

此处我用的是8.4.0版本,其他版本官方应该也有说明

  • 2、在module 中的build.gradle中加入:
apply plugin: 'com.jakewharton.butterknife'
dependencies {
	//butterknife8.4
    implementation 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}
  • 3、 同步一下

ok, 接下来你就可以使用 注解了,姿势是这样的:
在这里插入图片描述
你没有看错,这里是使用 R2, 而不是 R ,到此就完了。
啥 ? R2 哪来的 ? 为什么是R2 ? 哈哈哈,下次写ButterKnife 源码分析的时候会说明的。

如果写错或者问题,欢迎大佬指正留言指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
使用ButterKnife,需要进行以下步骤: 1. 在项目的build.gradle文件添加ButterKnife的依赖: ```groovy dependencies { implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' } ``` 2. 在需要使用ButterKnife的Activity或Fragment使用`@BindView`注解来绑定视图元素。 ```java public class MainActivity extends AppCompatActivity { @BindView(R.id.textView) TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 现在可以直接使用textView了 textView.setText("Hello ButterKnife!"); } } ``` 3. 调用`ButterKnife.bind(this)`方法来完成视图的绑定。这通常是在Activity的`onCreate()`方法进行。 4. 在需要为视图设置点击事件、长按事件等的地方,使用`@OnClick`、`@OnLongClick`等注解来定义相应的事件处理方法。 ```java public class MainActivity extends AppCompatActivity { @BindView(R.id.button) Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 设置点击事件处理方法 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 处理点击事件 } }); } @OnClick(R.id.button) void onButtonClick() { // 处理点击事件,使用注解方式 } @OnLongClick(R.id.button) boolean onButtonLongClick() { // 处理长按事件,使用注解方式 return true; } } ``` 这样,你就可以使用ButterKnife来简化视图绑定和事件处理的工作了。记得在合适的时机调用`ButterKnife.unbind(this)`方法来解绑视图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值