AndroidAnnotations首页

github上的项目地址AndroidAnnotations Github

wiki:https://github.com/excilys/androidannotations/wiki/AvailableAnnotations

1、使用依赖注入(Dependency Injection)不熟悉的可以了解一下Inversion of Control(IoC)

2、简化的线程模型(Simplified  threading model)

3、事件绑定(Event binding)

4、REST Client

5、No Magic  [它的意思是:AndroidAnnotations在编译的时候会产生一个子类(接下来你会明白),你查看这个子类,可以看到它是如何工作的]

项目中重要的两个jar包分别是:androidannotations-api-3.0.1.jar和androidannotations-3.0.1.jar
2).新建一个android项目,然后将androidannotations-api-3.0.1.jar复制到libs目录下,在项目的根目录新建一个文件夹,命名为compile-libs,然后将androidannotations-3.0.1.jar复制到该目录下.

3).然后设置项目属性:右键->Properties->Java Compiler->Annotation Processing 在该页面选中Enable project specific settings。

4).然后点击Annotation Processing的子项Factory Path页面,选中Enable project specific settings,然后添加编译所需的jar包。点击“Add JARs”将之前complie-libs目录下的androidannotations-3.0.1.jar导入,保存后退出。

运用方式之布局文件xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/myInput"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/myButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click me!"
/>
<TextView
android:id="@+id/myTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

对应Activity的java文件:

 package com.example.testaa;

 import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById; import android.app.Activity;
import android.content.Intent;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
@ViewById(R.id.myInput)
EditText myEditText; @ViewById
Button myButton; @ViewById
TextView myTextView;
/**
* 加载完View之后进行的处理
*/
@AfterViews
void afterViewProcess(){
myButton.setText("Next");
myTextView.setText("第一个Activity页面");
} /**
* 绑定点击事件
*/
@Click(R.id.myButton)
void processClick(){
Intent intent=new Intent(this,SubActivity_.class);
intent.putExtra("input_value", myEditText.getEditableText().toString());
startActivity(intent);
} /**
* 利用UI线程显示一个Toast
* @param content
*/
@UiThread
void showToast(String content){
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
}
/**
* 延时显示
* @param content
*/
@UiThread(delay=1000)
void showToastDelay(String content){
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
}
}

可以看出,我们通过注解的方式,大大简化了原有的代码。

注解1:@ViewById 与findViewById功能相似,如果ViewById后没有设置资源ID的话,就是自动查找与变量名称相同的id资源(条件是控件变量名称要与xml中定义的id必须一致)。

但是这样会有一个问题,如果在Click()方法中调用,运行时就会报出:NullPointerException的错误,我们就不能在Click()方法中直接使用,而是要在@AfterView注释的方法中使用

注解2:@Click 点击事件处理的注解。

对于@Click,方法名和xml文件中的id一样就可以这样写,AndroidAnnotations会自动识别,对于多个Button,可以写多个@Click,也可以在这样:

@Click({R.id.button1,R.id.button2,R.id.button3})
void buttonClicked(Button bt){
//TODO ...
}

注解3:@UiThread 后台Ui线程的注解,省去了Handler等等。

注解4:@EActivity 提示Activity的注解,注意,该注解将Activity编译成Activity_,注意,多一个下划线“_”,因此在AndroidManifest.xml文件中需要将其添加下滑线

原因:使用AndroidAnnotations,编译的时候会生成一个子类,这个子类的名称就是在原来的类之后加了一个下划线“_”,比如这个例子产生的子类名称为“MyActivity_”,这就需要你在注册这个Activity的时候,在AndroidManifest.xml中将 MyActivity 改为 MyActivity_ ,使用的时候也是使用MyActivity_来表示此类,如从另一个Activity跳转到此节目就要这样用:

注解5:@AfterViews 是指View类注入完毕之后执行的代码。

我们第二个页面的布局文件与第一个相同,我们主要看一下它的java文件:

package com.example.testaa;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById; import android.app.Activity;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; @EActivity(R.layout.activity_sub)
public class SubActivity extends Activity{
@ViewById(R.id.myInput)
EditText myEditText; @ViewById
Button myButton; @ViewById
TextView myTextView; @Extra(value="input_value")
String inputString; @AfterViews
void afterViewProcess(){
myTextView.setText(inputString);
} @Click(R.id.myButton)
void processClick(){
showToast("Clicked me !");
} @UiThread
void showToast(String content){
Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT).show();
}
}

注:一个@Extra注解,这个注解的含义和getIntent().getExtra()相同,目的是获取上一个Activity通过Intent传递过来的值。

AndroidManifest.xml文件:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testaa"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.testaa.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.testaa.SubActivity_"></activity>
</application> </manifest>

注意:Activity的声明,多添加了下划线“_”

Android开源框架:AndroidAnnotations的更多相关文章

  1. Android 开源框架Universal-Image-Loader学习

    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...

  2. Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/39057201),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  3. Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  4. Android进阶笔记13:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)

    1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListen ...

  5. android 开源框架推荐

    同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JS ...

  6. Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  7. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  8. 六款值得推荐的Android开源框架简介

    技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 1.volley 项目地址 https://github.com/smanik ...

  9. Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告

    原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二) ...

  10. [转]Android开源框架ImageLoader的完美例子

    Android开源框架ImageLoader的完美例子 2013年8月19日开源框架之Universal_Image_Loader学习 很多人都在讨论如何让图片能在异步加载更加流畅,可以显示大量图片, ...

随机推荐

  1. 让Linux下的打印机hp1020、hp p1008自动加载固件

    前言: 前段时间,处理公司打印机服务器Linux化工作.遇到问题如下:hp1020.hp1008断电后不能继续打印.而其他打印机在连接Linux打印机的情况下,断电后也能正常打印. 鉴于此情况,我搜寻 ...

  2. BZOJ 1058

    服气!我果然就是个傻逼. 傻兮兮地感觉两个数之间的差距无需删除一些答案,妈个鸡就只加入了一些新的答案忘记了去掉无效的答案.我果然是傻逼,经验不足脑子笨... 这么水的题...不说了,说多了都是泪. 自 ...

  3. 用Python操纵MySQL

    本例用Python操纵MySQL,从指定文件读取数据,并对数据进行处理,处理之后批量插入MySQL. 贴上代码: # -*- coding: gbk -*- import re import MySQ ...

  4. MogileFS 的介绍(MogileFS 系列1)[分布式文件系统]

    MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached.M ...

  5. Android简易数据存储之SharedPreferences

    Andorid提供了多种数据存储的方式,例如前面说到的“Android数据存储之SQLite的操作”是用于较复杂的数据存储.然而,如果有些简单的数据存储如果采用SQLite的方式的话会显得比较笨重.例 ...

  6. Java for LeetCode 141 Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...

  7. Auguse 2nd, Week 32nd Tuesday, 2016

    Love me little and love me long.不求情意绵绵,但愿天长地久. Friends are relatives you make for yourself.朋友是你自己结交的 ...

  8. Ubuntu 更新源

    1.首先备份Ubuntu12.04源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表) 2.修改更新源 ...

  9. Myeclipse 安装svn插件

    安装subclipse,  SVN插件1.从官网下载site-1.8.22.zip文件  访问不了可点我网盘2.从中解压出features与 plugins文件夹,复制到MyEclipse\MyEcl ...

  10. ipconfig 无效

    刚刚配置了很多的环境变量后,在命令行下输入ipconfig后无效了 于是在环境变量PATH底下再次加入了;C:\WINDOWS\system32; 从新运行ipconfig,问题解决