美文网首页ITAndroid开发实战总结Android Road
绝对不容错过,ButterKnife使用详谈

绝对不容错过,ButterKnife使用详谈

作者: 程序员Anthony | 来源:发表于2016-04-06 17:46 被阅读15971次

    本博客原地址:http://www.jianshu.com/p/b6fe647e368b

    (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使用中有哪些注意的点呢?

    注意:

    1. Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
    2. Fragment ButterKnife.bind(this, mRootView);
    3. 属性布局不能用private or static 修饰,否则会报错
    4. setContentView()不能通过注解实现。
    5. ButterKnife已经更新到版本7.0.1了,以前的版本中叫做@InjectView了,而现在改用叫@Bind,更加贴合语义。
    6. 在Fragment生命周期中,onDestoryView也需要Butterknife.unbind(this)
    7. ButterKnife不能再你的library module中使用哦!!这是因为你的library中的R字段的id值不是final类型的,但是你自己的应用module中确是final类型的。针对这个问题,有人在Jack的github上issue过这个问题,他本人也做了回答,点击这里
      属性必须是一个常量

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

    哈哈,这里说的是添加插件,让你写代码更快捷。
    Zelezny插件的使用的使用能让你变得更懒(也代码更快)

    **Zelezny插件的使用**
    5.1 怎么使用插件? 插件使用步骤1 插件使用步骤2 插件使用步骤3

    (6)推荐链接:

    1 ButterKnife github地址
    2 详解Dagger2
    3 Android's Options for Dependency Injection: Dagger, RoboGuice, and ButterKnife(这里是翻译文章链接Android依赖注入:Dagger、RoboGuice和ButterKnife)
    4 Dagger官网
    5关于在library中应用ButterKnife出现的问题
    6 8 个最优秀的 Android Studio 插件

    相关文章

      网友评论

      • 从此不言爱:我想打击你们一下,应用butterknife的module可是做不了library的哦,哈哈哈哈:yum:
      • 6b158c7daaf0:博主我现在用的是8.4.0版本的,我的Moudle使用了ButterKnife 现想导入到主项目中,有没有什么方法,8.4.0,貌似是支持lib使用的,我弄了两天了模块还是没有能整合到主项目中,如果你有什么方法的话,麻烦回复我一下,很急很关键!!! qq :1259183297
        6b158c7daaf0:@AthyZhou R2的那种方式,我也试过了 程序包找不到
        6b158c7daaf0:@AthyZhou 报的错误时 元素值必须为常量表达式
      • 我乐你不乐:新版本的ButterKnife 添加view的onClick监听无效,请问是怎么回事???
      • dotdog:android sutdio 2.2不能用。郁闷。
        潇萧凌龙:@dotdog 可以用啊
      • 99a3e443b0b3:不错,很详细
      • freewheel:我比较困惑的是该不该用butterKnife的onClick,我一开始不怎么想用,因为有时候需要在代码里动态地setOnclickListener。但是同事说,不用的话就跟原本的代码一样, 何必用butterKnife?😶
        程序员Anthony:@freewheel setonClickListener不用动态的吧。这只是一个监听器 ,进行的是初始化操作 。一般都在最开始初始化了呢。 ButterKnife的使用可以提高代码的阅读性。所以我一般都会使用。
      • 0b29d3ab9ae4:现在最新的版本是不是8.0.1了 我依赖这个版本之后在as中用不了Zelezny插件,是安装了generate找不到插件的使用按钮,这是为什么呢 我as的版本是1.5
        GeekBug:@androidMango 那是因为插件还没支持8.0 坐等插件作者发布支持
      • Avalon1:的却喃好用,特别是一个布局几十个控件的时候:flushed:
        0b29d3ab9ae4:@Avalon1 你好 为什么我用了8.0.1的版本然后用不了Zelezny呢 知道请告知一下
        Avalon1:@CameloeAnthony 就是在用插件,还有Gsonformat也是个好用的插件
        程序员Anthony:@Avalon1 哈哈 。用上插件更好用,
      • z淡:当你的工程突然有需求要改成lib时:joy:
        程序员Anthony:@zeng_gf 这个github上有解决方案的。但是ButterKnife的作者,jack也不是推崇这种用法。所以library的时候只有findViewById了。
      • f2cfc07753c2:棒棒哒。😁😁

      本文标题:绝对不容错过,ButterKnife使用详谈

      本文链接:https://www.haomeiwen.com/subject/mflmlttx.html