使代码更加精简,使项目更加容易维护。
就简单说一下特性:
1、使用依赖注入(Dependency Injection)
2、简化的线程模型(Simplified threading model)
3、事件绑定(Event binding)
4、REST Client
5、No Magic
下面请看例子:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidannotationsdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.androidannotationsdemo.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.androidannotationsdemo.SecondActivity_"></activity> </application> </manifest></span>
<pre name="code" class="java">package com.example.androidannotationsdemo; import java.util.List; import org.androidannotations.annotations.AfterTextChange; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.ViewsById; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; @EActivity(R.layout.fragment_main)//代替setContentView(R.layout.fragment_main); public class MainActivity extends ActionBarActivity { @ViewById(R.id.textView1)//初始化单个控件,代替findViewById TextView mTextView; @ViewsById({R.id.textView2,R.id.textView3,R.id.textView4})//初始化多个控件,把控件存放至队列里 List<TextView> textViewList; @ViewById(R.id.button1)//初始化button,代替findViewById Button button; //定义传递至的key值 public static final String NAME_KEY = "name_key"; public static final String AGE_KEY = "age_key"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Click(R.id.button1)//点击事件注解,点击button1之后调用此方法 public void startSecondActivity(){ //实例化Intent,启动SecondActivity Intent intent = new Intent(MainActivity.this,SecondActivity_.class); //传递参数, intent.putExtra(NAME_KEY, "小名"); intent.putExtra(AGE_KEY,"18"); startActivity(intent); } @AfterViews//在控件初始化完成之后执行 public void afterInitView() { mTextView.setText("控件初始化完成之后调用~"); //设置控件列表元素的显示内容 for (int i = 0; i < textViewList.size(); i++) { textViewList.get(i).setText("TextView" + (i+2)); } } @AfterTextChange(R.id.textView1)//控件发生改变时执行 public void textChange(){ Toast.makeText(this, "textView 发生改变", 3).show(); } }
package com.example.androidannotationsdemo; import org.androidannotations.annotations.AfterExtras; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.androidannotations.annotations.OnActivityResult; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import org.androidannotations.annotations.WindowFeature; import org.androidannotations.annotations.res.StringRes; import android.R.string; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView; import android.widget.Toast; @WindowFeature({Window.FEATURE_NO_TITLE,Window.FEATURE_INDETERMINATE_PROGRESS})//去掉标题 @EActivity(R.layout.second_activity)//关联布局文件 public class SecondActivity extends Activity { //利用注解获取上一个Activity传递过来值 @Extra(MainActivity.NAME_KEY) String name; @Extra(MainActivity.AGE_KEY) String age; /* //上面两行代码实际上执行此方法 * private void injectExtras_() { Bundle extras_ = getIntent().getExtras(); if (extras_!= null) { if (extras_.containsKey(NAME_EXTRA)) { name = extras_.getString(NAME_EXTRA); } if (extras_.containsKey(AGE_EXTRA)) { age = extras_.getString(AGE_EXTRA); } show(); } } */ @ViewById TextView textView2; @StringRes(R.string.stringDemo)//配置文件中的string String str; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toast.makeText(this, "主线程id:" + Thread.currentThread().getId(), 3).show(); doInBackground(); } @AfterExtras//接收到Intent传递过来的参数之后执行的方法 public void show(){ Toast.makeText(this, name + age + "岁", Toast.LENGTH_LONG).show(); } @Background//在后台开启一个子线程处理方法,不能进行UI的更新 public void doInBackground() { try { Thread.sleep(3000); } catch (Exception e) { } Log.i("子线程id", Thread.currentThread().getId()+""); updateUI(); } @UiThread//在主线程中去更新UI public void updateUI() { textView2.setText("UI 更新完成!"); Toast.makeText(this, str, 1).show(); } }