文档章节

Android碎碎念 -- ButterKnife注解的使用

淡定的米哥
 淡定的米哥
发布于 2016/02/19 14:48
字数 532
阅读 980
收藏 4

引用形式:

Maven

<dependency>
  <groupId>com.jakewharton</groupId>
  <artifactId>butterknife</artifactId>
  <version>7.0.1</version>
</dependency>
Gradle
compile 'com.jakewharton:butterknife:7.0.1'

使用方法:

Activity绑定示例

class ExampleActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.subtitle) TextView subtitle;
  @Bind(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);//绑定Activity
    // TODO Use fields...
  }
}

Non Activity绑定示例

public class FancyFragment extends Fragment {
  @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;
  }
}
View Holder绑定示例
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 {
    @Bind(R.id.title) TextView name;
    @Bind(R.id.job_title) TextView jobTitle;

    public ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }
}
监听器示例
//监听器也可以自动配置进方法中:
@OnClick(R.id.submit)
public void submit(View view) {
  // TODO submit data to server...
}

//监听方法的所有参数可以被操作:
@OnClick(R.id.submit)
public void submit() {
  // TODO submit data to server...
}

//定义一个具体的类型并且它将会自动的被类型转换
@OnClick(R.id.submit)
public void sayHi(Button button) {
  button.setText("Hello!");
}

//对通用事件操作时在一个单独的绑定中声明多个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();
  }
}

//自定义view可以绑定在他们自己的监听器上并且不需要具体声明一个ID
public class FancyButton extends Button {
  @OnClick
  public void onClick() {
    // TODO do something!
  }
}
BINDING RESET

Fragment和Activity相比有不同的生命周期。当在一个Fragment的onCreateView中绑定的时候,需要在onDestoryView中设置Views为null。但是,Butter Knife 有一个 unbind 方法来自动的做这件事。

public class FancyFragment extends Fragment {
  @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;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    ButterKnife.unbind(this);//解除绑定
  }
}

参考地址:

github:https://github.com/JakeWharton/butterknife

Introduction:http://jakewharton.github.io/butterknife/

示例版本为7.0.0,早前版本使用上有一定差别。

© 著作权归作者所有

淡定的米哥
粉丝 37
博文 76
码字总数 14409
作品 0
朝阳
高级程序员
私信 提问
Android Butterknife(黄油刀) 使用方法总结

前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广...

技术小能手
2018/08/24
0
0
Android组件化demo实现以及遇坑分享

首先贴出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android组件化demo 前言 前段时间看到最近一直很火的Android组件化然后就自己撸了一个demo,期间遇到了不少问题以及坑,在此记...

codeGoogle
2018/07/26
0
0
ButterKnife 牛油刀使用

一、butterknife介绍   ①官网 butterknife        ②Field and method binding for Android Views which uses annotation processing to generate boilerplate code for you   【......

小群子0618
2018/09/14
0
0
Android注解神器 ButterKnife框架

前言: 本人是一个只有几个月工作经验的码小渣。这是我写的第一篇博客,如有不足之处还请大家不要介意,还请大佬可以指出问题。 在这几个月的实战开发中自己也遇到了很多问题,真的是举步艰难...

码小渣
2018/11/03
0
0
【Android】如何实现ButterKnife

如何实现ButterKnife ButterKnife的原理简述 示例代码ButterKnifeProcedure Pluggable Annotation Processing 注解处理器Java5 中叫APT(Annotation Processing Tool),在Java6开始,规范化为......

xesam
2015/06/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
4
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
3
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
13
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部