(1)ButterKnife是什么?

在开发过程中,我们总是会写大量的findViewById和点击事件,像初始view、设置view监听这样简单而重复的操作让人觉得特别麻烦,当然不会偷懒的程序员不是好程序员,自然也出现了相应的解决方案--依赖注入。而ButterKnife则是依赖注入中相对简单易懂的很不错的开源框架,(其实ButterKnife也不算严格意义上的依赖注入,后面文章中会做分析)。但ButterKnife作为JakeWharton大神写的注解框架被广泛应用于android开发中,自然也有它的过人之处。下面对它的使用过程进行描述。

butterKnife

(2)ButterKnife 有哪些优势?

ButterKnife的具体使用,请参考文章

http://blog.csdn.net/itjianghuxiaoxiong/article/details/50177549

它的具体优势:

1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率

2.方便的处理Adapter里的ViewHolder绑定问题

3.运行时不会影响APP效率,使用配置方便

4.代码清晰,可读性强

butterknife的使用

(3) butterknife 和其他依赖注入框架的区别在哪里?

3.1 依赖注入框架的区别的联系:

其实主要在android中使用的依赖注入框架为Dagger、Butter Knife、RoboGuice、Android Annotations。这里提供链接:

Android's Options for Dependency Injection: Dagger, RoboGuice, and ButterKnife

对应的翻译文章:Android依赖注入:Dagger、RoboGuice和ButterKnife.

3.2 当然,这种典型的问题当然少不了StackOverflow上去看看,

输入关键字

找到点赞最多的答案,肯定对你有帮助

大概意思:

Buffer knife目的为注入到view,所以能够在非activity里面注入,也能注入到inflate的views里面Dagger能够注入到任何你想要的对象,只要其在module类中。或者它是构造器。但是缺少对方法和字段的注入支持。Buffer knife只是避免样板代码,findViewById,仅此而已,所以不能算是一个真正的注入。只是一个view的代言。

(4)ButterKnife使用中有哪些注意的点呢?

注意:

Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind

Fragment ButterKnife.bind(this, mRootView);

属性布局不能用private or static 修饰,否则会报错

setContentView()不能通过注解实现。

ButterKnife已经更新到版本7.0.1了,以前的版本中叫做@InjectView了,而现在改用叫@Bind,更加贴合语义。

在Fragment生命周期中,onDestoryView也需要Butterknife.unbind(this)

ButterKnife不能再你的library module中使用哦!!这是因为你的library中的R字段的id值不是final类型的,但是你自己的应用module中确是final类型的。针对这个问题,有人在Jack的github上issue过这个问题,他本人也做了回答,点击这里

属性必须是一个常量

(5)我还想更懒怎么办?

哈哈,这里说的是添加插件,让你写代码更快捷。

Zelezny插件的使用的使用能让你变得更懒(也代码更快)

**Zelezny插件的使用**

5.1怎么使用插件?

插件使用步骤1

插件使用步骤2

插件使用步骤3

(6)推荐链接:

1ButterKnife github地址

2详解Dagger2

3Android's Options for Dependency Injection: Dagger, RoboGuice, and ButterKnife(这里是翻译文章链接Android依赖注入:Dagger、RoboGuice和ButterKnife)

4Dagger官网

5关于在library中应用ButterKnife出现的问题

68 个最优秀的 Android Studio 插件

ButterKnife使用详谈的更多相关文章

  1. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. Android Butterknife 8.4.0 使用方法总结

    转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6016341.html 本文出自[赵彦军的博客] 前言 ButterKnife 简介 ButterKnife是 ...

  4. Android开发学习之路-使用annotationProcessor配置Butterknife

    Apt工具的作者宣布了不再维护该工具了,而且Android Studio也有了自己的插件,并且可以通过gradle来简单的配置. 其实用Butterknife的都知道,没有apt,onClick绑定不 ...

  5. Android ButterKnife配置使用

    ButterKnife在GitHub的地址:https://github.com/JakeWharton/butterknife 最新的版本是:8.4.0 app 模块的build.gradle: a ...

  6. Android注解使用之ButterKnife 8.0注解使用介绍

    前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种 ...

  7. JavaScript RegExp 基础详谈

    前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究.学习.掌握,而是抱着需要的时 ...

  8. ButterKnife Zelezny从配置到使用

    插件介绍:ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成.又一神器,完美告别 ...

  9. Android Studio插件之快速findViewById(butterknife和Android CodeGenerator的使用)

    首先在设置里面的Plugins里面下载安装插件: 安装之后会提示重启, 然后就是怎么使用了: butterknife的使用: 首先在build.gradle(app)里面添加这句话: compile ...

随机推荐

  1. PAT 1017 Queueing at Bank (模拟)

    1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...

  2. Logon Session Times

    How to Get User Logon Session Times from the Event Log To figure out user session time, you’ll first ...

  3. 查找文件路径find

    查找文件路径find              1.按照文件名查找 (1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找 (2)find ...

  4. linux环境配置时钟同步ntpd服务

    配置: 服务器1:192.168.169.139 服务器2:192.168.169.140 服务器3:192.168.169.141 目的:NTP能与互联网的时间保持同步,而且本身也是一台NTP服务器 ...

  5. Oracle DG强制激活 备库

    在实际运营环境中,我们经常碰到类似这样的需求,譬如想不影响现网业务评估DB补丁在现网环境中运行的时间,或者是想在做DB切换前想连接Standby DB做实际业务运行的测试,如果在9i版本的时候,想做到 ...

  6. delphi webbrowser 获取iframe

    procedure TForm1.Button4Click(Sender: TObject);var Index: Integer; Document: IHTMLDocument2; FrameId ...

  7. OpenOCD SWD调试stm32f0

    参考:http://www.stmcu.org.cn/module/forum/thread-610998-1-2.html

  8. PAT 天梯赛 L1-045. 宇宙无敌大招呼 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-045 AC代码 #include <iostream> #include <cstdio&g ...

  9. 优秀 H5 案例收集 Vol.2(不定期更新)

    上期浏览:Vol.1 再见了,影史最性感的硬汉http://news.163.com/special/fdh5_wolverine/ 活出真我http://balfhcy.pernod-ricard- ...

  10. 【Java】流与文件(端口 & 文件读写对象)

    概述: 1.input和output是相对于内存而言的.输入(input)就是写入到内存里,输出(output)就是把内存里的东西写到外面. 2.操作内存里的东西非常便利,要么声明变量,要么new对象 ...