做个记录方便自己和大家回头查看!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!");
}