androidannotations的基本用法

AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。

使代码更加精简,使项目更加容易维护。

就简单说一下特性:

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>

需要注意的是,我们需要在清单文件中注册的Activity需要在后面加”_“,如:MainActivity   -->  MainActivity_
因为在使用AndroidAnnotations时会给我们生成一个MainActivity_类去继承MainActivity,所以注册的时候只需要注册MainActivity_;

<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();
	}
}

项目案例下载地址: http://download.csdn.net/detail/u013043346/9367301


你可能感兴趣的:(android,Android开发,开源框架)