AndroidAnnotations 使用

原创
2014/07/18 17:22
阅读数 309

下面部分是基于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_ 这样类会失败,所以有网友提供一个反射方法来提取该类方法如下:

public class GeneratedClassUtils {

	@SuppressWarnings("rawtypes")
	public static Class get(Class clazz) {

		if (clazz == null) {
			return null;
		}
		if (clazz.getCanonicalName().endsWith("_")) {
			return clazz;
		}

		String name = clazz.getCanonicalName() + "_";

		try {
			Class result = Class.forName(name);
			return result;
		} catch (ClassNotFoundException e) {
			new RuntimeException("Cannot find class for" + name, e);
		}

		return null;
	}
}


第二关于命名。

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

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

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


    

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部