android 小刀注解自动,Android ButterKnife(黄油刀)的使用

添加依赖

虽然官网已经明确说明如何添加依赖, 我们还是做一下简单的介绍:

step 1:

配置工程下的build.gradle文件

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}

}

step 2:

配置Module下的build.gradle文件

apply plugin: 'android-apt'

android {

...

}

dependencies {

compile 'com.jakewharton:butterknife:8.4.0'

apt 'com.jakewharton:butterknife-compiler:8.4.0'

}

注意:

后面的版本号以github为准

注意不要忘记添加apply plugin: 'android-apt'

简单使用

Activity中的使用

class ExampleActivity extends Activity {

@BindView(R.id.title) TextView title;

@BindView(R.id.subtitle) TextView subtitle;

@BindView(R.id.footer) TextView footer;

@Override public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.simple_activity);

ButterKnife.bind(this);

// TODO Use fields...

}

}

注:使用ButterKnife不能够使用private和static修饰成员变量

Fragment中使用

public class FancyFragment extends Fragment {

@BindView(R.id.button1) Button button1;

@BindView(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;

}

}

获取资源文件

class ExampleActivity extends Activity {

@BindString(R.string.title) String title;

@BindDrawable(R.drawable.graphic) Drawable graphic;

@BindColor(R.color.red) int red; // int or ColorStateList field

@BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field

// ...

}

ViewHolder或Adapter中使用

public class MyAdapter extends BaseAdapter {

@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 {

@BindView(R.id.title) TextView name;

@BindView(R.id.job_title) TextView jobTitle;

public ViewHolder(View view) {

ButterKnife.bind(this, view);

}

}

}

点击事件处理

支持多个id同时处理

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })

public void pickDoor(DoorView door) {

if (door.hasPrizeBehind()) {

Toast.makeText(this, "You win!", LENGTH_SHORT).show();

} else {

Toast.makeText(this, "Try again", LENGTH_SHORT).show();

}

}

注: 方法通常也不能设置private和static

ButterKnife的工作流程 (感谢bxbxbai)

当你编译你的Android工程时,ButterKnife工程中 ButterKnifeProcessor 类的 process() 方法会执行以下操作:

开始它会扫描Java代码中所有的ButterKnife注解 @Bind 、 @OnClick 、 @OnItemClicked 等

当它发现一个类中含有任何一个注解时, ButterKnifeProcessor 会帮你生成一个Java类,名字类似 $$ViewBinder ,这个新生成的类实现了 ViewBinder 接口

这个 ViewBinder 类中包含了所有对应的代码,比如 @Bind 注解对应 findViewById() , @OnClick 对应了 view.setOnClickListener() 等等

最后当Activity启动 ButterKnife.bind(this) 执行时,ButterKnife会去加载对应的 ViewBinder 类调用它们的 bind() 方法

** 图解 **

4984ed31a521?mType=Group

ButterKnife原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值