【Android进阶】(1)使用开源框架AndroidAnnotation

1. 配置

首先去git上下载jar包,一个是androidannotations.jar,一个是androidannotations-api.jar。

新建我们的Android工程,将androidannotations-api.jar放入libs目录中,然后新建一个目录compile-lib,将androidannotations放进取,右键我们的工程-->Properties-->Java Compiler-->Annotation
Processing-->勾选Enable project specific settings和底下的两个选择框,然后点击左侧Factory Path,添加我们刚才compile-lib中的jar包,即可。

2. 框架的使用

注意,使用AndroidAnnotation后,所有四大组件的名字后面都需要加一个"_"。

(1). @EActivity

在Activity的上面使用@符号即可添加注解,例如:

@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {

<span style="white-space:pre">	</span>@ViewById(R.id.button1)
<span style="white-space:pre">	</span>Button button;

<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>protected void onCreate(Bundle savedInstanceState) {
<span style="white-space:pre">		</span>super.onCreate(savedInstanceState);
<span style="white-space:pre">	</span>}

<span style="white-space:pre">	</span>@Click(R.id.button1)
<span style="white-space:pre">	</span>public void startAcitvity() {
<span style="white-space:pre">		</span>startActivity(new Intent(MainActivity.this, SecondActivity_.class));
<span style="white-space:pre">	</span>}
}

看出来可以很方便的省去我们之前的findViewById方法。

(2). @EService

新建一个Service:

@EService
public class MyService extends Service {

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i("THR", "onStartCommand");
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

}

和Activity的差不多:

	@Click(R.id.button1)
	public void startService() {
		startService(new Intent(this, MyService_.class));
	}

注意都需要在manifest文件中配置,不能忘记下划线"_"。

(3). @ViewById查找控件

	@ViewById(R.id.textView1)
	TextView textView1;
	@ViewById(R.id.textView2)
	TextView textView2;

	@AfterViews
	public void setTextView() {
		textView1.setText("Text1");
		textView2.setText("Text2");
	}

如果不指定ViewById后面的id的话,它会默认的去寻找和我们变量名一致的id,如果找到则可以正常运行,找不到就会报空指针的异常。

(4). @ViewsById查找多个控件

还有一种方法使用ViewsById:

	@ViewsById({ R.id.textView1, R.id.textView2 })
	List<TextView> list;

	@AfterViews
	public void setTextView() {
		list.get(0).setText("Text1");
		list.get(1).setText("Text2");
	}

同样很简单。

(5). @Click点击事件

<span style="white-space:pre">	</span>@ViewById(R.id.textView1)
<span style="white-space:pre">	</span>TextView textView1;
<span style="white-space:pre">	</span>@ViewById
<span style="white-space:pre">	</span>TextView textView2;

<span style="white-space:pre">	</span>@Click({ R.id.textView1, R.id.textView2 })
<span style="white-space:pre">	</span>public void showToast() {
<span style="white-space:pre">		</span>Toast.makeText(this, "点击事件", 1).show();
<span style="white-space:pre">	</span>}

<span style="white-space:pre">	</span>@AfterViews
<span style="white-space:pre">	</span>public void setTextView() {
<span style="white-space:pre">		</span>textView1.setText("TextView1");
<span style="white-space:pre">		</span>textView2.setText("TextView2");
<span style="white-space:pre">	</span>}

使用@Click注解,还可以给多个View添加点击事件。

@LongClick的使用和这个差不多,这里就不做介绍了。

(6). @Extra可以方便传递参数

第一个Activity中:

	public static final String NAME = "name";
	public static final String AGE = "age";

	@Click(R.id.button1)
	public void startActivity() {
		Intent intent = new Intent(this, SecondActivity_.class);
		intent.putExtra(NAME, "Jerry");
		intent.putExtra(AGE, 27);
		startActivity(intent);
	}

SecondActivity中:

	@Extra(MainActivity.NAME)
	String name;
	@Extra(MainActivity.AGE)
	int age;

	@ViewById(R.id.name_view)
	TextView nameView;
	@ViewById(R.id.age_view)
	TextView ageView;

	@AfterViews
	public void initView() {
		nameView.setText(name);
		ageView.setText(age + "");
	}

(7). @ItemClick、@ItemLongClick和@Touch

这个主要用在ListView上:

	@ViewById(R.id.listView)
	ListView listView;

	@ItemClick(R.id.listView)
	public void listViewItemClick(int p) {
		Toast.makeText(this, p + "good", 0).show();
	}

ItemLongClick和这个使用方法类似。

(8). @Background处理后台任务的方法

	@Background
	public void doSomething() {
		Log.i("THR", "Background线程id" + Thread.currentThread().getId());
	}

	@Click(R.id.button1)
	public void startActivity() {
		doSomething();
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.i("THR", "MainActivity线程id" + Thread.currentThread().getId());
	}

通过运行发现,这个方法是运行在子线程中的。

(9). @UiThread

修改代码:

	@Background
	public void doSomething() {
		Log.i("THR", "Background线程id" + Thread.currentThread().getId());
		updateUi();
	}

	@UiThread
	public void updateUi() {<pre name="code" class="java"><pre name="code" class="java">		Log.i("THR", "updateUi线程id" + Thread.currentThread().getId());

textView1.setText("更新UI");}


可以使得更新UI的操作在主线程中调用,不会报异常。

(10). @StringRes获取资源文件中的String

	@StringRes(R.string.name)
	String name;

还有@DimensionRes的使用都类似:

	@DimensionRes(R.dimen.activity_horizontal_margin)
	double size;

(11). @WindowFeature窗口样式

无标题样式:

@WindowFeature({ Window.FEATURE_NO_TITLE, Window.FEATURE_INDETERMINATE_PROGRESS })
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {

4. 查看Activity_

右键工程-->Java Compiler-->Annotation Processing-->Generated source directory:-->去掉apt_generated前面的点。

5. 总结

在使用这个框架的时候要注意以下几点:

(1). 注册同名的Activity_

(2). View的修饰不能为private的

(3). 注解注释的方法和字段不能是private的

		Log.i("THR", "Background线程id" + Thread.currentThread().getId());

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 05:31:40

【Android进阶】(1)使用开源框架AndroidAnnotation的相关文章

六款值得推荐的android(安卓)开源框架简介

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 (5) 多级别取消请求 (6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-async-http

六款值得推荐的android(安卓)开源框架简介(转)

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-asyn

六款值得推荐的android(安卓)开源框架简介(转)

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载:(2) 网络请求的排序(scheduling)(3) 网络请求的优先级处理(4) 缓存(5) 多级别取消请求(6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)2.android-async-http 项目地址:https://github.com/loopj/android-async-http文档介绍:h

Android 开发中使用开源框架 DataDroid

DataDroid 框架简介 DataDroid是基于Android平台的一个开源的开发库,基于Android 的RESTful封装用来简化Android应用中的数据管理.该开源库的下载地址为 CSDN资源. DataDriod 在Android项目中的使用 从github上clone下来的源代码中就有很多种类型的数据管理的demo,这里就简单得描述一下通过DataDroid的工作流程进行一个打开摄像头的过程.想看下面项目的源码的可以去我的github查看,地址:Github 1.以单例模式建立

Android开发常用流行开源框架记录

发掘了一些Android常用开源框架,记录并分享,希望能在开发当中帮到大家. 缓存: 名称:DiskLruCache 描述:Java实现基于LRU的硬盘缓存 源码地址(可能需要翻墙) 作者:guolin 相关博客:Android DiskLruCache完全解析,硬盘缓存的最佳方案 图片加载: Android-Universal-Image-Loader 描述:一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示.所以,如果你的程序里需要这个功能的话,那么不妨

六款值得推荐的android(安卓)开源框架简介【转】

http://my.oschina.net/u/1244156/blog/380647 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-htt

六款值得推荐的android(安卓)开源框架

1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-asyn

Android示例应用:开源框架Glide的使用

Android开源框架Glide的使用-示例应用 加载网络图片 加载网络图片 加载本地图片-简易图库 加载网络图片 引入对应的库 compile 'com.android.support:recyclerview-v7:25.0.0' compile 'com.github.bumptech.glide:glide:3.7.0' 创建RecyclerView的布局res/layout/fragment_list.xml <?xml version="1.0" encoding=&

Android中的多线程开源框架

AsyncTask.ORMLite.Volley.ImageLoader 线程池: 线程池的优点: 1 重用线程,避免过分开销 2 控制线程最大的并发数 3 对线程进行简单的管理 AsyncTask=线程池+handler ORMLite  线程池 加锁syncronized  保证增删改查的时候,数据的安全. volley 项目地址 :https://github.com/smanikandan14/Volley-demo(1)  JSON,图像等的异步下载:(2)  网络请求的排序(sche