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
    评论
Android Studio的ButterKnife是一个用于简化Android开发中视图绑定的开源库。它可以帮助开发者通过注解方式快速地绑定视图资源,减少findViewById的使用,提高开发效率。 使用ButterKnife,首先需要在项目的build.gradle文件中添加依赖: ```groovy dependencies { implementation 'com.jakewharton:butterknife:10.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1' } ``` 然后,在需要使用ButterKnife的Activity或Fragment中,使用`@BindView`注解绑定视图资源。 例如,在Activity中绑定一个TextView: ```java public class MainActivity extends AppCompatActivity { @BindView(R.id.textView) TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 视图绑定 // 使用textView textView.setText("Hello ButterKnife!"); } } ``` 在Fragment中使用类似的方式绑定视图资源。 需要注意的是,使用ButterKnife进行视图绑定时,必须在`setContentView()`之后调用`ButterKnife.bind(this)`来完成绑定。 除了`@BindView`注解外,ButterKnife还提供了其他注解,如`@OnClick`用于点击事件的绑定、`@Nullable`用于可为空的注解等。 值得一提的是,自从Android Studio 3.6版本起,Google推出了ViewBinding功能,它提供了类似ButterKnife的视图绑定功能,并且是官方支持的。如果使用最新版本的Android Studio,建议使用ViewBinding来代替ButterKnife

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值