做个记录方便自己和大家回头查看!2017年4月26日 16:36:05 LJ
-------------------------------------------------------------------------------------------
使用@BindView
标注字段和视图ID,以在布局中查找并自动投射相应的视图。
class ExampleActivity extends Activity { @BindView(R.id.title)TextView标题; @BindView(R.id.subtitle)TextView subtitle; @BindView(R.id.footer)TextView页脚; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.bind(this); } }
代替慢速反射,生成代码来执行视图查找。调用bind
代理这个生成的代码,你可以看到和调试。
上述示例生成的代码大致相当于以下内容:
public void bind(ExampleActivity activity){
activity.subtitle =(android.widget.TextView)activity.findViewById(R.id.subtitle);
activity.footer =(android.widget.TextView)activity.findViewById(R.id.footer);
activity.title =(android.widget.TextView)activity.findViewById(R.id.title);
}
资源绑定
绑定预先定义的资源与@BindBool
,@BindColor
,@BindDimen
,@BindDrawable
,@BindInt
,@BindString
,其结合一个R.bool
ID(或者指定的类型)到其相应的字段中。
class ExampleActivity extends Activity {
@BindString(R.string.title)String title;
@BindDrawable(R.drawable.graphic)可绘图形;
@BindColor(R.color.red)int red; // int或ColorStateList字段
@BindDimen(R.dimen.spacer)浮标垫片; // int(用于像素大小)或float(用于精确值)字段
// ...
}
公共类FancyFragment扩展片段
class ExampleActivity extends Activity {
@BindView(R.id.button1)按钮button1;
@BindView(R.id.button2)按钮button2; @Override public View onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){ 查看view = inflater.inflate(R.layout.fancy_fragment,container,false); ButterKnife.bind(this,view); // TODO使用字段... return view; // 返回视图; }}
另一个用途是简化列表适配器内的视图保持器模式。
public class MyAdapter extends BaseAdapter {
@Override public View getView(int position,View view,ViewGroup parent){
ViewHolder持有人
if(view!= null){
holder =(ViewHolder)view.getTag();
} else {
view = inflater.inflate(R.layout.whatever,parent,false);
holder = new ViewHolder(view);
view.setTag(holder);
}
holder.name.setText(“John Doe”);
// etc ...
返回视图;
}
静态类ViewHolder {
@BindView(R.id.title)TextView名称;
@BindView(R.id.job_title)TextView jobTitle;
public ViewHolder(查看视图){
ButterKnife.bind(this,view);
}
}
}
监听器绑定[LISTENER BINDING]
监听器可以直接注解到方法上
@OnClick(R.id.submit)
public void submit(View view) {
// TODO submit data to server...
}
监听器方法的参数是可选的(监听器是可以带参数的)
@OnClick(R.id.submit)
public void sayHi(Button button) {
button.setText("Hello!");
}
多个控件可以绑定同一个监听器
@OnClick({R.id.submit,R.id.login})
public void sayHi(Button button) {
button.setText("Hello!");
}