美文网首页
Android ButterKnife详解

Android ButterKnife详解

作者: AKyS佐毅 | 来源:发表于2017-11-06 10:52 被阅读0次
ButterKnife详解

ButterKnife 简介

  • ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。

  • 项目github地址:https://github.com/JakeWharton/butterknife

  • ButterKnife 优势

    • 1、强大的View绑定和Click事件处理功能,简化代码,提升开发效率
    • 2、方便的处理Adapter里的ViewHolder绑定问题
    • 3、运行时不会影响APP效率,使用配置方便
    • 4、代码清晰,可读性强

如何添加依赖

  • 在项目的module 的build.gredle 文件中的dependencies标签下添加。
ButterKnife

如何使用

  • 这里推荐使用插件完成绑定工作

    • zelezny : Butterknife插件的使用


      87F45EABCFBCF1F25548A6C3E7576CCD.png
  • 视图绑定操作

如何使用插件 事件绑定
  • 注意:必须绑定
ButterKnife.bind(this);
  • 通过使用 @BindView 来消除 findViewById
  • 将多个 View 组织到一个列表中,一次性操作它们
  • 通过使用 @onClick 为 View 绑定监听,消除 listener 的匿名内部类
  • 通过使用资源注解如 @BindColor,来消除资源的查找

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过这个问题,他本人也做了回答,点击这里

ButterKnife原理

  • ButterKnife是一个依托Java的注解机制来实现辅助代码生成的框架。反射机制虽然很灵活,但是很慢。
  • Annotation processing 是javac中用于编译时扫描和解析Java注解的工具。Annotation processing是在编译阶段执行的,它的原理就是读入Java源代码,解析注解,然后生成新的Java代码。新生成的Java代码最后被编译成Java字节码,注解解析器(Annotation Processor)不能改变读入的Java 类,比如不能加入或删除Java方法
    下图是Java 编译代码的整个过程,可以帮助我们很好理解注解解析的过程:
Annotation Processor
  • 开始扫描Java代码中的所有 ButterKnife注解。
  • ButterKnifeProcessor --> <className>$$ViewBinder。
  • 调用bind 方法加载生成的ViewBinder类。

相关文章

网友评论

      本文标题:Android ButterKnife详解

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