ButterKnife

简介: ButterKnife

ButterKnife具有强大的绑定事件和资源文件功能,同时几乎不会影响程序运行效率,ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class,使用ButterKnife可以使代码更清晰易读

使用

1.添加依赖

    impelementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

遇到一个问题

The given artifact contains a string literal with a package reference ‘android.support.v4.content

解决方法:更新ButterKnife版本

implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'

2.使用

需要在使用控件前绑定,不然会报空指针异常
ButterKnife.bind(this);

ButterKnife.bind(this)必须在初始化绑定布局文件之后,否则会报错

需要在使用控件前绑定,不然会报空指针异常
ButterKnife.bind(this);

Fragment中绑定ButterKnife

Unbinder unbinder = ButterKnife.bind(this,view);
 
@Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();//视图销毁时必须解绑
    }

在Fragment中需要在视图销毁时解绑Butterknife,否则会造成内存泄漏

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

2、在非Activity 类(eg:Fragment、ViewHold)中绑定: ButterKnife.bind(this,view);这里的this不能替换成getActivity()。

3、在Activity中不需要做解绑操作,在Fragment 中必须在onDestroyView()中做解绑操作。

4、使用ButterKnife修饰的方法和控件,不能用private or static 修饰,否则会报错。错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1)

5、setContentView()不能通过注解实现。(其他的有些注解框架可以)

6、使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。

7、使用ButterKnife.bind(this,view)绑定一个view的子节点字段。如果你在子View的布局里或者自定义view的构造方法里 使用了inflate,你可以立刻调用此方法。或者,从XML inflate来的自定义view类型可以在onFinishInflate回调方法中使用它。

 

3.常用注解

名称 解析
@BindViews 绑定多个view id 为一个view的list变量 @BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name }) List<EditText> nameViews;
@BindView 绑定一个view id为一个view变量@BindView(R.id.title) TextView title;
@BindArray 绑定String中的array数组 @BindArray(R.array.city)String[] citys;
@BindBitmap 绑定图片资源文件, @BindBitmap(R.mipmap.wifi) Bitmap bitmap;
@BindBool 绑定真假boolean @BindBool(R.bool.boor)
@BindColor 绑定颜色 @BindColor(R.color.red)
@BindDimen 绑定尺寸 @BindDimen(R.dimen.spacer) Float spacer;
@BindDrawable 绑定Drawable @BindDrawable(R.drawable.graphic) Drawable graphic
@BindFloat 绑定Float
@BindInt 绑定Int
@BindString 绑定一个String id为String变量, @BindString(R.string.app_name) String msg
@BindAnim 绑定动画
@BindFont 绑定字体文字

显示详细信息

绑定事件,一共有12个监听事件

名称 解析
@OnClick 点击事件
@OnCheckedChanged 选中,选中取消
@OnEditorAction 软键盘的功能按键
@OnFocusChange 焦点改变
@OnItemClick Item被点击事件(注意这里有坑,如果item里面有Button等这些有点击的控件事件的,需要设置这些控件属性focusable为false)
@OnItemLongClick tem长按,返回真则可以拦截onItemClick
@OnItemSelected Item被选择事件
@OnLongClick 长按事件
@OnPageChange 页面改变事件
@OnTextChanged EditText里面的文本变化事件
@OnTouch 触摸事件
@Optional 选择性注入,如果当前对象不存在,就会抛出一个异常,为了压制这个异常,可以在变量或者方法上加入注解,让注入变成选择性的,如果目标View存在,则注入, 不存在,则什么事情都不做

显示详细信息


目录
相关文章
|
缓存 API 调度
Android OkHttp+Retrofit+Rxjava+Hilt实现网络请求框架
🔥 介绍 本文通过OkHttp+Retrofit+Rxjava+Hilt实现一个网络请求框。
677 0
Android OkHttp+Retrofit+Rxjava+Hilt实现网络请求框架
|
Java 数据库 Android开发
Android注入框架ButterKnife使用解析
Android注入框架ButterKnife使用解析
178 0
|
安全
浅析viewBinding和DataBinding
viewBinding 优点 配置 使用 源码解析 DataBinding 配置 创建实体类 创建布局 创建viewModel dataBinding绑定
463 0
浅析viewBinding和DataBinding
|
Android开发
Android ButterKnife使用详解
ButterKnife 的使用: build.gradle:dependencies中添加 compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
120 0
Android ButterKnife使用详解
DHL
|
XML 前端开发 算法
竟然如此简单,DataBinding 和 ViewBinding
ViewBinding 和 DataBinding 为我们解决了这么多问题,但是为什么很多小伙伴们不愿意使用 ViewBinding 和 DataBinding,今天我们从使用的角度来分析。
DHL
445 0
竟然如此简单,DataBinding 和 ViewBinding
|
Java
ButterKnife源码解析
ButterKnife(https://github.com/JakeWharton/butterknife)是一款android平台的依赖注入框架,通过该工具可以实现View、OnClickListener的注入,省去了findViewById、setOnClickListener的过程。
1233 0
|
Java Android开发 编译器
04.手写ButterKnife(ButterKnife源码阅读)
源码地址:https://github.com/renzhenming/MyButterknife 相信大多数安卓人员开发中都在使用ButterKnife进行代码生成。
958 0
|
Java Android开发 数据格式
Android注解——不用ButterKnife也能自己搞定findViewById和onClick事件绑定
ButterKnife大家肯定都是用过啦,这是谷歌大神Jake Wharton写的一个开源的IOC框架,用起来很方便,帮我们省去了很多重复机械的代码。如果还有小伙伴,只会用findViewById的方法获取View实例,那就真的很Out咯! image.
1185 0
|
Java Android开发 数据格式