Annotation注解与butterknife
注解分为三种,一般来讲我们使用的是运行时会加载及能够反射读取的注解类型,
其他编译器生效的类型和编译后放入类文件而运行期不能加载解析的对我们没啥用。
所以从普通理解上来看,注解要配合着反射用就好了。
java有很多依赖注入框架,比如Spring,这类注解框架是很强大的,它们通过在运行
时读取注解实现注入,依赖和注入都需要依靠Java的反射机制,反射对于性能敏感
的Android来说是一个硬伤,所以这类注入框架一般用于JavaEE开发。
不过在butterknife中,其注解保留为class,RetentionPolicy.class,依赖注入,用
的是APT(Annotation Process Tool)在编译时生成辅助类,这些类继承特定父类或
实现特定接口,程序运行时的开销可以忽略不计。
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记。程序可以利用
java的反射机制来了解你的类及各种元素上有无何种标记,针对不同的标记,就去做
相应的事件。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
但凡Annotation起作用的场合都是有一个执行机制/调用者通过反射获得了这个元数据
然后根据它采取行动。
如果只有value属性!可以不写属性名和等于号,直接写值即可!
注解的作用:
1.生成文档。最常见的,java最早提供的注解,常用的有@see,@param,@return
2.跟踪代码依赖性,实现替代配置文件功能。注解配置。
3.在编译时进行格式检查。如@override放在方法前,如果这个方法不是覆盖了超类
方法,则编译时就能检查出。
注意在使用butterknife的时候,
在8.0版本,
需要添加apt工具,
在project的build文件添加,
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
在module的build文件的最上部添加,
apply plugin: 'com.neenbedankt.android-apt'
依赖dependencies那里需要填上,
compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
这样才能通过编译,如果不添加apt的话。
@BindView(R.id.click1)
Button b1;
在下面直接使用的话,会出现null指针异常。
另外注意不能用private或者static
@BindViews({R.id.click2,R.id.click3})
Button[] b;// 这里需要用list或者array
在下面用的话,
b[0].setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"点击了2",Toast.LENGTH_SHORT).show();
}
});
b[1].setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"点击了3",Toast.LENGTH_SHORT).show();
}
});
@BindString(R.string.app2)
String app2;
绑定预设的字符串以及color、dimen,drawable等。可以节省大量代码的编写。
凡是跟view相关需要findViewById的都可以用这个,包括lists,
不过这里需要用到Action和Setter
还有监听绑定,甚至可以分组一起绑定。
在碎片中注意在onDestroyView中需要unbind方法中取消绑定,
这里在Unbinder中有解绑实例。
即使使用butterknife,也可以使用findById来找,可以减少代码
Annotation注解与butterknife的更多相关文章
- Java Annotation 注解
java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...
- Hibernate的Annotation注解
当项目变得比较大的时候,如何还使用hbm.xml文件来配置Hibernate实体就会变得比较复杂.这里Hibernate提供了Annotation注解方式,使得Hibernate的映射文件变得很方便管 ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- paip.Java Annotation注解的作用and 使用
paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...
- hibernate annotation注解方式来处理映射关系
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...
- Android开发学习之路--Annotation注解简化view控件之初体验
一般我们在写android Activity的时候总是会在onCreate方法中加上setContentView方法来加载layout,通过findViewById来实现控件的绑定,每次写这么多代码总 ...
- java EE中的hello1.java及Annotation(注解)
一.Annotation(注解) 注解(Annotation)很重要,未来的开发模式都需要注解,注解是java.lang.annotation包,Annotation是从java5引入的,它提供一些不 ...
- Annotation(注解)介绍
Annotation(注解)是什么: Annotation(注解) 官方的定义: An annotation is a form of metadata, that can be added t ...
- Hibernate 零配置之Annotation注解
JPA规范推荐使用Annotation来管理实体类与数据表之间的映射关系,从而避免同时维护两份文件(Java 实体类 和 XML 映射文件),将映射信息(写在Annotation中)与实体类集中在一起 ...
随机推荐
- Spark 1.3.0 单机安装
一.试验环境: CentOS6.6 最小化安装:主机名spark-test,IP:10.10.10.26 OpenStack虚拟云主机. 注:安装流程:进入linux->安装JDK->安装 ...
- InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)
http://bbs.csdn.net/topics/390162519 事实上,本文内容很简单且浅显,所以取消前戏,直接开始.. 源代码:在本文最后 这里是一张动画,演示在多线程(无限循环+Thre ...
- UVa 11111 Generalized Matrioshkas
嵌套玩具, 要求外层玩具的尺寸比内层玩具尺寸的和要大. 每一个玩具由一个负数与相应的正数表示, 在这两数之间的部分即为此玩具内部的玩具. 要求判断一串输出的数字是否能组成一个合法的玩具. 一个合法的玩 ...
- tomcat启动很慢的原因
启动后tomcat显示的代码如下: 2014-4-3 10:50:15 org.apache.catalina.core.AprLifecycleListener init 信息: The APR b ...
- C++11新特性(3) lambda表达式(1)
C++11加入了一项名为lambda表达式的新功能.通过这项功能能编写内嵌的匿名函数,而不必编写独立函数或函数对象,使得代码更加理解. lambda表达式包括下面部分. [capture_block] ...
- 华为C语言笔试题集合
①华为笔试题搜集 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为 ...
- Don't Repeat Yourself (不要重复你自己)
DRY是指Don't Repeat Yourself特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性.简洁性,并且可能导致代码之间的矛盾.<The Pragmatic Programm ...
- 用DirectShow实现视频採集-流程构建
DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,而且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对Dir ...
- MemCached Cache Java Client封装优化历程
1.什么是memcached?(从官网翻译翻译) 免费和开源.高性能.分布式内存对象缓存系统,通用在自然界,但用于加速动态web应用程序,减轻数据库负载. Memcached是一个内存中的键值存储为小 ...
- MYSQL SQL 审核工具 (inception安装步骤)
http://blog.csdn.net/wulantian/article/category/5825391