在Android开发中findViewById和setOnClickListener解脱写法。
在任意的一个类中 @Bind(R.id.et) EditText editText;
@OnClick(R.id.btn)
public void btnClick(){ Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show(); }
@Override protected void
onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ButterKnife.bind(this); }
这是ButterKnife注解 在Gradle中引用 compile 'com.jakewharton:butterknife:7.0.1'
Eclipse 下载Jar包
在Activity中使用 onCreate中加入这一行 (切记) ButterKnife.bind(this);
ButterKnife通过@Bind 注解传入View ID
@Bind(R.id.et) EditText editText; @Bind(R.id.btn) Button button;
绑定资源到类成员上可以使用@BindBool、@BindColor、@BindDimen、@BindDrawable、@BindInt、@BindString
。使用时对应的注解需要传入对应的id资源,例如@BindString你需要传入R.string.txt的字符串的资源id。
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red;
@BindDimen(R.dimen.spacer) Float spacer; View监听器的绑定,在ButterKnife注解中传入ViewID 监听器将自动配置到方法中
@OnClick(R.id.btn)
public void btnClick(View view){ Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show(); }
ButterKnife不仅支持@OnClick,还支持@OnLongClick,@OnTouch等等,详细参考Javadoc http://jakewharton.github.io/butterknife/javadoc/ 在非Activity中使用 Butter Knife提供了ButterKnife.bind()的几个重载,只要传入根布局,便可以在任何对象中使用注解绑定。 @Bind(R.id.button1) Button button1; @Bind(R.id.button2) Button button2; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.bind(this, view); // TODO Use fields... return view; } 在ListView的Adapter中 @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; 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... return view; } static class ViewHolder { @Bind(R.id.title) TextView name; @Bind(R.id.job_title) TextView jobTitle; public ViewHolder(View view) { ButterKnife.bind(this, view); } } 对于在Fragment中使用ButterKnife需要注意:Fragment与Activity生命周期不同,Fragment比Activity多个解除绑定的步骤 @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); }