AndroidAnnotations 使用

下面部分是基于2.6上使用的注解和解释

AfterInject 定义的方法在类的构造方法执行后执行
AfterTextChange 定义的方法在TextView及其子类的Text属性改变后执行
AfterViews 定义的方法在setContentView后执行
Background 定义的方法在后台线程执行
BeforeTextChange 定义的方法在TextView及其子类的Text属性改变前执行
Click 定义点击监听器
EActivity 在Activity中启用Annotations
EProvider 在 ContentProvider中启用Annotations
EReceive 在BroadcastReceiver中启用Annotations
EService 在Service中启用Annotations
EView 在自定义的View的子类中启用Annotations
Fullscreen 全屏
NoTitle 无标题

3.0

中增加了

EFragment 对Fragment的支持

还有官网上给出的Rest GET (我猜想这是个请求还没试过)

以下方法在本人并不知道在2.6里面是否存在。

@Transactional 数据库查询注释。必要参数SQLiteDatabase

添加该注释的方法中可以直接写对应的sql方法。至于对数据库的事务处理则在之后生成的文件中会帮你处理

@ItemClick 即 OnItemClickListener

listItemClicked(int position) position则就是当前的item的position

如果传递的类型不是int 那么则调用parent.getAdapter().getItem(position) 强制转换

@ItemSelect 即 OnItemSelectedListener

必须包含一个boolean参数,额外最多再增加一个参数

@ItemLongClick即OnItemLongClickListener

与ItemClick 同理

@StringArrayRes 即获得array的资源参数

@StringRes 获取string参数

@ColorRes 获取color参数

@BooleanRes 获取bool参数

@SystemService  获取getSystemService的参数

@UiThread(delay = 100) 延迟100毫秒后执行

@Extra(MY_STRING_EXTRA) 即 Bundle extras_ = getIntent().getExtras();

if(extras_.containsKey(MY_STRING_EXTRA))

xx = extras_.getString(MY_STRING_EXTRA);

注意点:

第一关于注解类的引用:

如果大伙打开我们项目可以看到.apt_generated这样一个文件,这里面就是存放我们注解后生成的最终类文件。

我们可以打开看到最后的生成的类都是final。这是3.0后才增加的,所以不支持我们的注解类是抽象的。(PS:抽象类,小样的,你还打算让我框架牛逼到几个意思帮你实现抽象方法啊~)

我们在AndroidManifest.xml中注册的activity,service则都在缘有类的后面增加"_"如:将LoginActivity类头顶增加了@EActivity,那么在AndroidManifest.xml中注册的类则是:LoginActivity_ 当然包名是原先的一样的。当然这样之后我们在一个activity中打开另外一个activity则也是打开他最终的生成类(如:LoginActivity_)由于eclipse的毛病不少所以有的时候我们直接引用LoginActivity_ 这样类会失败,所以有网友提供一个反射方法来提取该类方法如下:

1public class GeneratedClassUtils { 2 3 @SuppressWarnings("rawtypes") 4 public static Class get(Class clazz) { 5 6 if (clazz == null) { 7 return null; 8 } 9 if (clazz.getCanonicalName().endsWith("_")) { 10 return clazz; 11 } 12 13 String name = clazz.getCanonicalName() + "_"; 14 15 try { 16 Class result = Class.forName(name); 17 return result; 18 } catch (ClassNotFoundException e) { 19 new RuntimeException("Cannot find class for" + name, e); 20 } 21 22 return null; 23 } 24}

第二关于命名。

由于你的注解类会通过AndroidAnnotations生成一个最终类,所以当你在很愉快的写 @ViewId @Click的时候,AndroidAnnotations会在你的最终类里面默默的写下hasViews.findViewById(id.layout_top_bar_right).这是多好助手,但是你在使用的同时也应当注意,这里面使用到id.xxx这id原本引用的是R.id。那如果我们在我们的注解类上写个非private的id呢~这时候就会提示我们空指针异常了。所以第二点必须注意,尽量少在注解类使用 id命名的参数,如果需要使用请使用private 形容。

目前掌握的内容就这么多。

以后有时间会不定期更新~

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Lua在Linux中获取UUID的方法