AndroidAnnotations开发框架使用详解

AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。使代码更加精简,使项目更容易维护。相比原生的Android App代码量,几乎可以少一半,由于是开源项目,大家可以直接用,具体用法和介绍,大家可以参考下面的GitHub地址:

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

简单说明下Android Studio的配置方法,比较简单,修改对应module的build.gradle文件(注意是对应module的build.gradle文件,不是整个project的build.gradle),添加下面的内容:

dependencies {
    .....

    /**
     * Android Studio配置AndroidAnnotations框架
     * https://github.com/excilys/androidannotations/blob/master/examples/gradle/build.gradle
     * http://www.cnblogs.com/caobotao/p/5138935.html
     */
    compile 'com.github.rey5137:material:1.1.0'
    compile 'de.greenrobot:eventbus:2.4.0'
    compile 'net.steamcrafted:load-toast:1.0.6'
}

/**
 * 下面的部分都是为配置AndroidAnnotations框架添加的
 */
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // replace with the current version of the Android plugin
        classpath 'com.android.tools.build:gradle:2.1.0-alpha4'
        // the latest version of the android-apt plugin
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}
repositories {
    mavenCentral()
    mavenLocal()
}

apply plugin: 'android-apt'
def AAVersion = '3.3.1'

dependencies {
    apt "org.androidannotations:androidannotations:$AAVersion"
    compile "org.androidannotations:androidannotations-api:$AAVersion"
}

apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
    }
}
使用方法:

package com.jackie.androidannotations;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;

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 java.util.List;

@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
    public static final String KEY_NAME = "name";
    public static final String KEY_AGE = "age";

    @ViewById(R.id.start)
    Button mStartButton;

    /**
     * 方法1 每个组件都指定id
     */
//    @ViewById(R.id.label1)
//    TextView mLabelTextView1;
//    @ViewById(R.id.label2)
//    TextView mLabelTextView2;

    /**
     * 方法2 如果不指定id, 就要保证变量名和xml中定义的id一致
     */
//    @ViewById
//    TextView label1, label2;

    /**
     * 方法3
      */
    @ViewsById( {R.id.label1, R.id.label2} )
    List<TextView> mList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Click(R.id.start)
    public void startActivity() {
        Intent intent = new Intent(this, SecondActivity_.class);
        intent.putExtra(KEY_NAME, "Jackie");
        intent.putExtra(KEY_AGE, "18");
        startActivity(intent);
    }

    @AfterViews
    public void setTextView() {
//        mLabelTextView1.setText("Hello");
//        mLabelTextView2.setText("World");

//        label1.setText("Hello");
//        label2.setText("World");

        for (TextView textView : mList) {
            textView.setText("Hello");
        }
    }
}

从上面的代码可以看出,用@EActivity、@ViewById、@AfterViews、@Click等注解来完成组件的创建、初始化和点击等操作。含义如下:

@EActivity

必须要有一个layout id来表示这个Activity所使用的布局,用来替代setContentView的操作。

@ViewById

和原来的findViewById()方法一样,后面可以跟上每个view id,用来替代组件的初始化操作,值得注意的是:@ViewById后的id是可以不写的,条件是组件变量名称要与xml中定义的id必须一致(方法2)。

@AfterViews 

表示在组件初始化完成后在执行,更新组件状态的方法必须加上这个注解,否则会出现空指针。

@Click 

表示点击事件,用来完成组件的点击事件的操作。

当然AndroidAnnotations还有很多注解,比如@background表示在子线程运行,@UiThread表示在主线程运行等等。有兴趣的同学可以到Github上学习,里面有详细的介绍,基本上涵盖了所有Android的基本知识。


最需要注意的一点就是:使用AndroidAnnotations千万要记得,编译的时候会生成一个子类,这个类的名称就是在原来的类之后加了一个下划线“_”,比如这个例子产生的子类名称为“MainActivity_”,这就需要你在注册这个Activity的时候,在AndroidManifest.xml中将 MainActivity 改为 MainActivity_ ,使用的时候也是使用MainActivity_来表示此类,跟上面的SecondActivity_类似。

另外上面的MainActivity中跳转的时候还传递了参数,可以用@Extra标签来获取传递的值。

SecondActivity.java:

package com.jackie.androidannotations;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.ViewById;

@EActivity(R.layout.activity_second)
public class SecondActivity extends AppCompatActivity {

    @ViewById(R.id.name)
    TextView mNameTextView;
    @ViewById(R.id.age)
    TextView mAgeTextView;

    @Extra(MainActivity.KEY_NAME)
    String mName;
    @Extra(MainActivity.KEY_AGE)
    String mAge;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @AfterViews
    public void setNameAndAge() {
        mNameTextView.setText(mName);
        mAgeTextView.setText(mAge);
    }
}






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值