butterknife:
作用:
用于初始化界面控件,控件方法,通过注释进行绑定控件和控件方法
栗子:
public class mainactivity extends appcompatactivity {
@bindview(r.id.btntest1)
button btntest1;
@bindview(r.id.btntest2)
button btntest2;
@bindview(r.id.lblmsg)
textview lblmsg;
@bindview(r.id.txtmsg)
edittext txtmsg;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
butterknife.bind(this);
}
@onclick(r.id.btntest1) void test1(){
toast.maketext(this, txtmsg.gettext().tostring(), toast.length_long).show();
}
@onclick(r.id.btntest2) void test2(){
string msg = "test2222222222";
lblmsg.settext(msg);
toast.maketext(this, msg, toast.length_long).show();
}
}
源码解读:
butterknife.bind(this);
绑定界面元素和方法的关联。
1、传入当前对象,得到当前对象的类名a,查找a+‘_viewbinding’组成的类名的,类的构造函数,参数是a类对象和view
2、得到类,调用他的构造函数,函数中通过findviewbyid,来进行绑定(由于a+_viewbinding是生成的类,该类已知了所有需要绑定的控件,所以顺序处理了。)
3、对于事件方法,则创建了已定义的兼容性的子类,进行调用处理。
4、到这里。所有操作就关联上了。
自动生成了,_viewbinding类,用于关联
引入:
// androidx
implementation 'com.jakewharton:butterknife:10.0.0'
annotationprocessor 'com.jakewharton:butterknife-compiler:10.0.0'
// android.support.v4.content
// implementation 'com.jakewharton:butterknife:8.8.1'
// annotationprocessor 'com.jakewharton:butterknife-compiler:8.8.1'