Android ButterKnife详解

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 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,301评论 25 708
  • 俗话说的好“不想偷懒的程序员,不是好程序员”,我们在日常开发android的过程中,在前端activity或者fr...
    蛋西阅读 4,982评论 0 14
  • 前言 Butterknife——相信多同学都知道,这是一个注解框架,一般在绑定View的时候使用。不得不说,这个框...
    带心情去旅行阅读 13,362评论 8 66
  • 坐在摩拜总部办公室的一楼里,感觉回到了把人热得奄奄的烦躁夏天,这室内比室外还凉爽。这会我倒希望是夏天,至少不用在办...
  • 人平均活到六十八岁,一共24820天,19万个小时,3500万分钟,差不多21亿秒左右,这10秒,你在读我的留言,...
    起个帅酷的昵称阅读 189评论 0 0