Fry in the Web

次からこうしようと思ったことを書き残しておきます

Android Annotationsの使い方

メリット

・冗長なコードを書かずにすむ。
・コードがかなり読みやすくなる。
・コーディング効率がぐんと上がる。

デメリット

・初心者がこれを使うと本来のAndroid Javaのプログラミング方法を覚える事ができない。
・使い方にかなりクセがある。

導入方法

1.Build.gradle(app)に以下を追記

//apply pluginは必ずapply plugin: 'com.android.application'より後に書くようにしてください。
apply plugin: 'android-apt'
//バージョン情報が古いことがありますので適宜最新に更新してお使いください
def AAVersion = '3.3.2'
dependencies {
    apt "org.androidannotations:androidannotations:$AAVersion"
    compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile

    }}

2.Build.gradle(アプリ名)に以下を追記

dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

3.Syncすると終わりです。簡単ですね

使用方法

Android Annotationsの使用はハマりどころがめちゃくちゃ多いです。
注意してください。

@EActivity

このアノテーションはActivityを拡張します。

@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity
 {
@AfterViews
void Initialize()
{
}
}

まずはMainActivityを上記の様にしてみてください。
(R.layout.activity_main)の部分は従来setContentView(R.layout.activity_main);
のように書いていた部分の置き換えですので、MainActivityに読み込みたいlayout.xmlを指定します
@OnCreateでViewを操作すると落ちるので注意してください

そして、AndroidManifest.xmlを以下のように変更します。

<!-- android:name=".Activity.MainActivity"に棒を付け足す-->
<activity
            android:name=".Activity.MainActivity_"
            android:label="@string/app_name" >

エラーが表示されて心配だと思いますがRebuildするとなくなりますので安心してください。
Rebuildして実行すると無事メインアクティビティが表示されるかと思います
実は上のコードは下記コードの書き換えとなっています。

public class MainActivity extends AppCompatActivity
 {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

layout.xmlに記述されたViewを操作したいときは、

@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity
 {
@ViewById(R.id.view_text)
TextView text;
@AfterViews
void Initialize()
{
text.setText("Hello,Android Annotations");
}
}

Viewを拡張したコンポネートであればすべて@ViewByIdをつけたフィールド変数で宣言できます
各フィールド変数はアクティビティ作成時に自動的に初期化されます。

@AfterViewsは@ViewByIdの初期化が終わった時点で呼ばれるメソッドです、
厳密に言うとフィールド変数の初期化は@OnCreateの後に行われるので
@OnCreateでビューを操作しようとするとぬるぽ吐かれます。
@OnCreateの代替として使えるのが@AfterViewsと思っておいて良いです

使い方は一応これくらいで十分だと思います。
残りは公式のドキュメント(英語)読むとよくわかります
https://github.com/excilys/androidannotations/wiki/Cookbook