关于ButterKnife的使用我就不讲了,很简单,随便搜搜网上一大堆。
下面一个案例就是我使用ButterKnife生成的代码:
public class MainActivity extends AppCompatActivity {
@BindView(R.id.tv_01)
TextView tv01;
@BindView(R.id.tv_02)
TextView tv02;
@BindView(R.id.btn_01)
Button btn01;
private Unbinder mUnbinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUnbinder = ButterKnife.bind(this);
tv01.setText("00000000");
tv02.setText("00999900000099");
}
@OnClick(R.id.btn_01)
public void onViewClicked() {
Toast.makeText(this,"hhhhh",Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
mUnbinder.unbind();
super.onDestroy();
}
}
我们在Android Studio中找到如下文件夹:
可见,ButterKnife的核心就是apt生成了一个中间类,我们看一下这个中间类:
public class MainActivity_ViewBinding implements Unbinder {
private MainActivity target;
private View view2131165218;
@UiThread
public MainActivity_ViewBinding(MainActivity target) {
this(target, target.getWindow().getDecorView());
}
@UiThread
public MainActivity_ViewBinding(final MainActivity target, View source) {
this.target = target;
View view;
target.tv01 = Utils.findRequiredViewAsType(source, R.id.tv_01, "field 'tv01'", TextView.class);
target.tv02 = Utils.findRequiredViewAsType(source, R.id.tv_02, "field 'tv02'", TextView.class);
view = Utils.findRequiredView(source, R.id.btn_01, "field 'btn01' and method 'onViewClicked'");
target.btn01 = Utils.castView(view, R.id.btn_01, "field 'btn01'", Button.class);
view2131165218 = view;
view.setOnClickListener(new DebouncingOnClickListener() {
@Override
public void doClick(View p0) {
target.onViewClicked();
}
});
}
@Override
@CallSuper
public void unbind() {
MainActivity target = this.target;
if (target == null) throw new IllegalStateException("Bindings already cleared.");
this.target = null;
target.tv01 = null;
target.tv02 = null;
target.btn01 = null;
view2131165218.setOnClickListener(null);
view2131165218 = null;
}
}
通过bind方法将Activity实例传进来,然后实现findViewById和setOnClickListener等。