解决组件化开发butterknife 在 library中使用的坑

组件化爬坑---ButterKnife的使用 想必大家都知道在组件化开发中如何使用ButterKnife,简单说明如下: 1.在最外层的build.gradle中引入butterKnife插件: 2.在对应的module下的build.gradle的dependencies中引入对应的butterknife: 3.在library中使用控件绑定时,使用R2替代R: 一切看起来貌似很正常,但我在组件化开发中却遇到了在libr... 阅读详情

在Android开发中butterknife是一个很好的对资源初始化的工具,它可以使你的代码简洁通俗易懂,同时配合Android ButterKnife Zelezny插件可以让你写代码的速度提升至少20倍。

在一般app中我们都是单组件开发,什么意思呢,你只有一个主moduel,所有代码不管是java,xml,资源,依赖库都在app中,这个时候使用butterknife是非常简单的,如GitHub地址描述照着做就可以了。

  • 第一步
    在app底下的build.gradle中添加这两个依赖。
dependencies {
  compile 'com.jakewharton:butterknife:8.5.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
  • 第二步
    在activity中如图使用即可,别忘了在oncreate方法中添加 ButterKnife.bind(this);
class ExampleActivity extends Activity {
  @BindView(R2.id.user) EditText username;
  @BindView(R2.id.pass) EditText password;
...
}

一切顺其自然,一般照着做都不会有问题。

  • 重点是当你想对项目进行组件化开发时,butterknife的使用就不是那么简单了,当然GitHub上也有说明怎么在library中使用方法,我和多数人情况一样最终发现照着作者的使用示例不管你怎么调整都将是一个大坑,最终都是无法使用。github上也有很多反馈,发现所有人都是一脸懵逼,连作者都是一脸懵逼。

下面介绍根据我无限尝试总结出的在组件化开发中library中如何使用butterknife.

  • 首先不能像github地址描述的那样使用依赖,在全局build.gradle 中请这样写,特别注意版本,不要使用最新的8.5.1 而应该使用8.4.0,不要问我为什么。
buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
  • 在library里正常引入butterknife,这里可以使用最新版本8.5.1。
    1、在library中build.gradle中引入插件
    apply plugin: 'com.jakewharton.butterknife'
    2、 dependencies 中添加依赖
dependencies {
  compile 'com.jakewharton:butterknife:8.5.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}

到此使用前期工作就算做完了,下面介绍在library中如何使用和注意事项。

  • butterknife在library activity中的使用和注意事项
    1、用R2代替R findviewid
 @BindView(R2.id.textView)
    TextView textView;
    @BindView(R2.id.button1)
    Button button1;
    @BindView(R2.id.button2)
    Button button2;
    @BindView(R2.id.button3)
    Button button3;
    @BindView(R2.id.image)
    ImageView image;

2、在click方法中同样使用R2,但是找id的时候使用R。

 @OnClick({R2.id.textView, R2.id.button1, R2.id.button2, R2.id.button3, R2.id.image})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.textView:
                break;
            case R.id.button1:
               
                break;
            case R.id.button2:
                break;
            case R.id.button3:
                break;
            case R.id.image:
                break;
        }
    }

3、特别注意library中switch-case的使用,在library中是不能使用switch- case 找id的,解决方法就是用if-else代替。

  @OnClick({R2.id.textView, R2.id.button1, R2.id.button2, R2.id.button3, R2.id.image})
    public void onViewClicked(View view) {
        int i = view.getId();
        if (i == R.id.textView) {
        } else if (i == R.id.button1) {
        } else if (i == R.id.button2) {
        } else if (i == R.id.button3) {
        } else if (i == R.id.image) {
        }
    }

下面开始讲解demo。

  • gradle配置ButterKnife

     

    主Module使用

  •  

     

  • 副module(library)中使用

     

     

  • 注意问题
    特别注意:当副Module使用R2时候可会报红,没关系,rebuild 就好了
    强烈建议大家 用插件 Android ButterKnife Zelezny 生成 然后在library中根据每个地方修改成R2。

自此介绍完毕,下面放出ButterKnifedemo链接https://github.com/CeleryIce/ButterKnifeDemo

欢迎大家加入Android进阶学习交流群:4112676,分享各自的见解和看法。

 

用python自动复制粘贴excel表里某一列的数据到另一个表中 昨天接到人事小姐姐求助减轻复制粘贴的重复工作量,分享一下代码 半路新手上路 耶 把 2.xlsx 表里的第二列 的数据复制粘贴到 test.xlsx的第一列 python3.6.2 from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.writer.excel import Exc... 阅读详情

相关推荐

STM32f103--ADC配置

2.对于规则通道,选中EXTI线路11或TIM8_TRGO作为外部触发事件,可以分别通过设置ADC1和ADC2的ADC1_ETRGREG_REMAP位和ADC2_ETRGREG_REMAP位实现。注意: 在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。2.在某些双ADC模式中,在完整的ADC1数据寄存器(ADC1_DR)中包含了ADC1和ADC2的规则转换数据。通过设置ADC_CR2寄存器的ADON位可给ADC上电。

weixin_51864506的博客 5313

ButteKnife的插件与gradle插件版本冲突解决方法

将butterknife插件版本降为8.4.0如下:build.gradle如下:   buildscript {    repositories {        jcenter()        google()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.0.0'        class...

ql_1024的博客 1428

R | 提取文件夹内栅格数据的最小值、最大值、标准差和平均值

各位同学好,我们长需要用长时间序列栅格数据的平均值做变量的时间变化分析,用代码能够帮助我们省下很多时间。

qq_48539301的博客 449

如何在 Android Studio 中使用 ButterKnife 修复此错误?

我读过这个错误发生在其他库中,在极少数情况下似乎与我的无关,我仍然没有找到解决方案。我知道 Butterknife 已被弃用,我应该迁移到 ViewBinding,但目前将整个项目转换为一项艰巨的任务。从 Gradle 中删除 Butterknife,同步,添加回来,再次同步。完全删除 Butterknife 库,它不会在编译时产生此错误,但由于缺少 Butterknife 显然无法编译。您应该使用不同的 jdk 进行编译,我正在使用过于高级的 jdk 进行编译。将其还原为 jdk11 为我解决了。

chuyouyinghe的专栏 1220

HR离职预测模型实战:可解释、可干预、可落地的三层架构

员工离职预测本质上是组织健康度的早期诊断技术,其核心原理在于从行为、心理与结构数据中识别稳定性衰减信号。该技术的价值不仅在于提升预测准确率,更在于将模糊的‘人才风险’转化为可归因、可干预的具体因子,如工龄阶段、满意度落差、薪酬分位数等。典型应用场景覆盖HRBP主动留任、业务部门梯队预警及HRIS系统智能升级。本文聚焦于构建具备业务可解释性与操作闭环能力的离职预警模型,深度融合HR工作流与机器学习工程实践,尤其强调逻辑回归基线、特征业务化重构及三层递进式架构设计。

赵士杰的博客 385

iTunes登录协议全解析:从抓包到签名验证(含HTTPDebugger避坑指南)

本文深入解析了iTunes登录协议的核心流程,包括sign-sap-setup-cert和sign-sap-setup-buffer等关键请求,并提供了使用HTTPDebugger等工具进行抓包分析时绕过反调试检测的实战技巧与避坑指南。文章详细拆解了PLIST编解码、请求签名验证机制及密码加密逻辑,为网络安全研究和协议逆向提供了完整的技术路径。

weixin_29224309的博客 331

gradle:7.4.0 butterknife R2无法获取问题

Incorrectly typed data found for annotation element public abstract int butterknife.BindView.value()

lin6253422的博客 1354

电机控制::软件架构::微型软件架构

所谓软件架构就是软件分层:HAL库,嵌入式操作系统,中间件,应用层。大型项目可参考借鉴ROS/PX4/Apollo/FMT等无人机、机器人、无人驾驶等开源项目;电机控制大型为AUTOSAR架构,小型跑裸机参考 前后台系统 或 微型实时操作系统对模块管理的思想。基本原理还是参照大型项目的架构来的,只是大部分层与块都相对简单,也没有操作系统这一层。硬件架构了解不同芯片组合及其各自的特点。1.FPGA+;2.架构;3.TC387+AUTOSAR架构,车规级,汽车领域常用。

one__leaf的博客 1695

解决插件ButterKnife在Library中使用的坑

前言 ButterKnife是控件注入框架,可以帮助安卓开发者省去初始化控件的重复性工作,简单快捷地初始化布局文件中的控件,极大地提升开发效率。 1. 背景 在一般app中我们都是单组件开发,即只有一个主moduel,所有代码不管是java,xml,资源,依赖库都在app中,此时使用 ButterKnife 是非常简单的,参考 GitHub 官方文档 就可完成。 2. 问题 但是...

一只驴在敲代码 3115

步进电机选型避雷手册:为什么你的42HS电机总丢步?从相数、电流到散热全面拆解

本文深入剖析了42HS步进电机在高速或重载下易出现丢步问题的根本原因。文章指出,选型时不应仅关注静态保持转矩,而需重点分析动态矩频曲线、合理匹配驱动器电流与细分数、进行准确的机械传动惯量计算,并有效管理系统共振与散热。通过全面拆解这些关键因素,为工程师提供了实用的选型避雷指南与系统优化方案。

weixin_29275257的博客 97

华为OD机试双机位C卷-恢复数字序列 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 恢复数字序列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 恢复数字序列。

qq_45776114的博客 1203

Android 组件化实战,秀出天际

} 4. 在主 app module 中引入其他Module 要注意的一点是每个组件如果是独立运行的话,那它是不能作为依赖库供app模块使用的,所以在app模块下的build.gradle文件中需要进行依赖判断 if (!isApplicationModule1.toBoolean()){ implementation project(’:module1’) } if (!isApplicationModule2.toBoolean()){ implementation project(’:module2’

m0_64604893的博客 222

第一节:从Chat_Bot 到 AI_Agent——一个范式转换

本文系统剖析了工业级AI代理系统ClaudeCode的设计原理与工程实践。通过对比ChatBot与Agent的三个本质差异:自主循环决策vs单轮应答、环境交互vs纯文本I/O、持久状态管理vs无状态对话,揭示了构建生产级Agent系统的关键挑战。文章详细解析了ClaudeCode的五层架构设计、1800+文件组成的运行时系统,包括工具调度、权限管理、状态持久化等核心机制,并阐述了从简单API调用到完整Agent系统的演进路径。

2201_75869398的博客 67

**组件化butterknife在library中的使用**

组件化butterknife在library中的使用 集成步骤 在APP项目下的build.gradle添加 dependencies { classpath "com.android.tools.build:gradle:4.1.2" classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.3' // NOTE: Do not place your application dependenci

sinat_25432443的博客 240

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

组件化开发butterknife 在 library中使用的坑

在Android开发中butterknife是一个很好的对资源初始化的工具,它可以使你的代码简洁通俗易懂,同时配合Android ButterKnife Zelezny插件可以让你写代码的速度提升至少20倍。 在一般app中我们都是单组件开发,什么意思呢,你只有一个主moduel,所有代码不管是java,xml,资源,依赖库都在app中,这个时候使用butterknife是非常简单的,如GitH...

奋斗小威的专栏 500

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android 组件化 之butterknife

解决组件化开发butterknife 在 library中使用的坑 R.java、R2.java 是时候懂了 butterknife 组件化开发 library 中 R 类问题的批量解决方案 源码下载

lucky9322的专栏 1617

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ButterKnife使用方法详解

介绍 ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。 GitHub地址:https://github.com/Jake...

孤独的冥王星 5万+

解决添加Butterknife8.8.1依赖后出错的问题

我们先依照如下方式配置ButterKnife: 1.在Project的 build.gradle 中添加如下代码: classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1' 2.在app的 build.gradle 中添加如下代码: apply plugin: 'com.jakewharton.butterknife'(在顶...

ljb_blog的专栏 768

Android组件化开发之四:组件化填坑之旅

1.2.3.4.5.序号名称坑深度内容| 1 || 极光推送的配置文件不能放在library工程里面,必须放到application工程中。| 2 |Android Studio里面快捷转换方式:选中“switch”,ALt+Enter同时选中,弹出对话框,选择“Replace ‘switch’ with ‘if’”。| 3 |在library工程中,提示:Attribute value must be constant。

2401_83601703的博客 575

Butterknife在library下使用

在刚做项目之前,一直都没有了解过组件化,都是在单一的模块下使用,感觉使用简单,就没有留意那么多了,知道在公司做项目时,才发现,原来在组件化下的Library中不能使用butterknife了,经过一番折腾,终于可以使用了,自butterknife8.0之后就可以使用了,原因在于library下的资源文件中定义id不是final类型了,,,,下面直接介绍如何使用吧 第一步:

vaechr的博客 447

关于Butterknife 的一些使用

今天学习了一下黄油刀的相关,出现了几个问题在这里记录一下。 1.在我按照github上的配置来导入相关包的时候出现了以下的报错信息 添加依赖过程: 在项目的project 的build.gredle 文件中的dependencies标签下添加。 classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.1' //Butterk...

zfenger 316

ButterKnife为什么被弃用?

原因:无法应用到组件化开发中 那用啥:ViewBinding https://github.com/JakeWharton/butterknife From JakeWharton This tool is now deprecated. Please switch to view binding. Existing versions will continue to work, obviously, but only critical bug fixes for integration with AGP

xiyangyang8110的博客 3041

Android组件化aar躺坑记:ButterKnife 报 元素值必须为常量表达式错误

背景: 项目有需求,将自己写的模块作为一个module给到大项目使用,所以准备把自己的项目打包成aar包。 一、如何将独立项目打包成aar: 1、修改module下的application 为library: ——> 2、修改Manifest.xml文件如下: 删掉下面这些以及apk入口: 3、修改代码中的switch语句为if语句。 4、如果代码有配混...

bachuo6392的博客 1832
上一篇: 只会写xml和Activity,做android真的不行!
下一篇: 今日头条Android面试的10道题
动脑学院[David]
博客等级 码龄8年 44粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值