Android 注解ButterKnife绑定控件使用指南

做个记录方便自己和大家回头查看!2017年4月26日 16:36:05   LJ

-------------------------------------------------------------------------------------------

使用@BindView标注字段和视图ID,以在布局中查找并自动投射相应的视图。

class ExampleActivity extends Activity {
  @BindViewR.id.titleTextView标题;
  @BindViewR.id.subtitleTextView subtitle;
  @BindViewR.id.footerTextView页脚;

  @Override public void onCreateBundle savedInstanceState){
    super.onCreatesavedInstanceState);
    setContentViewR.layout.simple_activity);
    ButterKnife.bindthis);
  }
}

代替慢速反射,生成代码来执行视图查找。调用bind代理这个生成的代码,你可以看到和调试。

上述示例生成的代码大致相当于以下内容:

public void bindExampleActivity activity){
  activity.subtitle =(android.widget.TextViewactivity.findViewByIdR.id.subtitle);
  activity.footer =(android.widget.TextViewactivity.findViewByIdR.id.footer);
  activity.title =(android.widget.TextViewactivity.findViewByIdR.id.title);
}

资源绑定

绑定预先定义的资源与@BindBool@BindColor@BindDimen@BindDrawable@BindInt@BindString,其结合一个R.boolID(或者指定的类型)到其相应的字段中。

class ExampleActivity extends Activity {
  @BindStringR.string.titleString title;
  @BindDrawableR.drawable.graphic)可绘图形;
  @BindColorR.color.redint red; // int或ColorStateList字段
  @BindDimenR.dimen.spacer)浮标垫片; // int(用于像素大小)或float(用于精确值)字段
  // ...
}
公共类FancyFragment扩展片段
class ExampleActivity extends Activity {
  @BindViewR.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 getViewint positionView viewViewGroup parent){
    ViewHolder持有人
    ifview!= null){
      holder =(ViewHolderview.getTag();
    } else {
      view = inflater.inflateR.layout.whateverparentfalse);
      holder = new ViewHolderview);
      view.setTagholder);
    }

    holder.name.setText(“John Doe”);
    // etc ...

    返回视图;
  }

  静态类ViewHolder {
    @BindViewR.id.titleTextView名称;
    @BindViewR.id.job_titleTextView jobTitle;

    public ViewHolder(查看视图){
      ButterKnife.bindthisview);
    }
  }
}

监听器绑定[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!");
}


猜你喜欢

转载自blog.csdn.net/jian51868/article/details/70808068