介绍开源注入框架 Butter Knife 的使用方法
- AUTHOR: jingtalk
- DEMO: jingtalk/Hello-ButterKnife
Butter Knife介绍
官方Git地址
官网使用说明
Android开发中大量的findViewById和点击事件,像初始view、设置view监听这样简单而重复的操作让人觉得特别麻烦,这个时候就有了相应的偷懒文案-依赖注入。
目前比较流行的两种 ButterKnife 和 Dagger:
而Dagger中View的注入写法非常困难或者难懂,这个时候 ButterKnife 诞生了,
所以直接叫 ButterKnife 为 findViewById 都是没有问题的。
Butter Knife的特点:
- 强大的View绑定和Click事件处理功能,简化代码,提升开发效率
- 方便的处理Adapter里的ViewHolder绑定问题
- 运行时不会影响APP效率,使用配置方便
- 代码清晰,可读性强
AS配置
在module的build.gradle文件中添加如下代码
最新版本信息请在官网使用说明中查询
|
|
即可;
绑定View、资源
下面这些绑定操作在 ButterKnife.bind(this) 后执行相应id与view的绑定,要注意的是,这一行代码必须在 setContentView 之后,否则会有异常发生;
Butter Knife 支持下面这些绑定操作,对于View的绑定,相当于findViewById操作;对于资源绑定,相当于已经初始化,取值为对应的values资源 或者 图片文件。
使用情况如下:
绑定Fragment
在onCreateView中使用
绑定Adapter
主要是创建ViewHolder的方式不一样,代码逻辑在getView中完成。
标准写法
标准用法
Butter knife的写法
Butter knife的写法
对比发现,会简洁很多。
OnClick、OnLongClick绑定
支持可变参数的函数,并能批量绑定处理
其它监听器绑定
Butter Knife还支持下面这些监听器操作
实际上,BK对该类型的回调函数的写法有一定的要求,如返回值或者参数等,这个具体问题具体对待,从直观的做法是直接看源码的注释,如下所示:
可选绑定
默认情况下,如果找不到目标视图,则会抛出异常
使用 @Optional,存在即绑定,不存在即忽略,不抛异常
ButterKnife.findById()强转
ButterKnife.findById()自动强转,第一个参数可为 View, Activity, Dialog,使用如下:
Binding Reset操作
Fragments 有比Avtivity更多的生命周期 ,如果需要在onCreateView中注入一个fragment,在onDestroyView中销毁它
Butter Knife 有一个reset 方法自动实现它
ButterKnife.apply使用
Zelezny插件使用
如果还想偷懒的话,可以在AndroidStudio->File->Settings->Plugins->搜索Zelezny插件下载使用, 它可以快速生成对应组件的实例对象,不用手动写。
使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键—>Generate—>Generate ButterKnife Injections,然后就出现如图的选择框,在里面可以选择相应的事件并自动生成。