Android Annotations快速开发框架入门
环境搭建
Eclipse IDE
上官网下载
androidannotations-bundle-3.2.zip
解压获取
androidannotations-api-3.2.jar
放到项目中的libs目录下新建一个compile-libs目录,放入
androidannotations-3.2.jar
右击项目,选中
Properties
,找到Java Compiler-->Annotation Processing
对Enable project specific settings
打勾,打开Annotation Processing的子项,对Ena ble project specific settings
打勾,再把androidannotations-3.2.jar
添加进来clean下项目,ok!
AS上大同小异
注入
//替代findViewById
@ViewById
@ViewsById
//在findViewById后执行
@AfterViews
//获取Activity之间传递的数据并注入
@Extra
事件绑定
//代替各种事件
@Click
@LongClick
@ItemClick
@ItemLongClick
@Touch
多线程
//后台子线程中运行
@Background
//UI主线程中运行
@UiThread
资源注入
//替代getResources()
@StringRes
@ColorRes
@StringArrayRes
Demo
//AndroidManifest.xml中
<activity
android:name="com.example.androidannotations.MainActivity_"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.androidannotations.SecondActivity_" >
</activity>
//MainActivity.java中
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@ViewById(R.id.button1)
Button button;
@ViewsById({ R.id.textView1, R.id.textView2 })
List<TextView> list;
@Click(R.id.button1)
public void toast() {
Intent intent = new Intent(this, SecondActivity_.class);
intent.putExtra(SecondActivity_.EXTRA_AGE, "666");
intent.putExtra(SecondActivity_.EXTRA_NAME, "Lshare");
startActivity(intent);
}
@AfterViews
public void setText() {
for (TextView tv : list) {
tv.setText("Lshare");
}
}
@LongClick(R.id.textView1)
public void longClick() {
Toast.makeText(this, "tv", 0).show();
runInBack();
}
@Background
public void runInBack() {
Log.i("lsh", "id:" + Thread.currentThread().getId());
updateUI();
}
@UiThread
public void updateUI() {
button.setText("Update ui");
Log.i("lsh", "id:" + Thread.currentThread().getId());
}
}
//SecondActivity.java中
@EActivity(R.layout.activity_second)
public class SecondActivity extends Activity {
public static final String EXTRA_NAME="name";
public static final String EXTRA_AGE="age";
@Extra(EXTRA_NAME)
String name;
@Extra(EXTRA_AGE)
String age;
@ViewById(R.id.nameView)
TextView nameTextView;
@ViewById(R.id.ageaView)
TextView ageTextView;
@AfterViews
public void initUI(){
nameTextView.setText(name);
ageTextView.setText(age);
}
}
注意事项
AndroidManifest.xml中注册的类名后要加下划线
加注解的代码要是public的
原理
- 使用到观察者模式
- 编译时处理注解:AbstracProcessor工具类及javax.lang.model.element
- 使用到JCodeModel ,Oracle公司的一套开源框架,简单地说是用来自动生成java代码的
学习开源框架的方法
- 上官网学习
- 搭建环境
- 运行官方Demo
- 自己动手写Demo