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;
@BindViewR.id.button2)按钮button2; @Override public View onCreateViewLayoutInflater inflaterViewGroup容器,Bundle savedInstanceState){ 查看view = inflater.inflateR.layout.fancy_fragmentcontainerfalse); ButterKnife.bindthisview); // 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!");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值