k242hd's memo

RubyとAndroidと時々TopCoder

AndroidAnnotationsを使ったActivityの作り方

前回はAndroidAnnotationsの導入方法を紹介しました。

今回はそのアノテーションを使ったAcitivityの作り方を紹介します。



今回使うアノテーションは「@EActivity」

@EActivityの「E」とはEnhanceの略です。

Activityを便利に使うためのアノテーションという感じですね。


この@EActivityを使わずにActivityを生成しようとすると、

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
}

こんな感じでonCreateメソッドをオーバーライドして、レイアウトファイルをセットしますよね。



これを@EActivityを使って書き換えると、

import org.androidannotations.annotations.EActivity;

@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
	
}

@EActivityの後のカッコ内にレイアウトファイルを指定するだけでOK


ただし、この時に注意しないといけないことがあります。


実はAndroidAnnotationsを適用したクラスは、そのクラスを継承した新たなクラスを生成しています。

MainActivityだったらMainActivity_のように末尾にアンダースコアがついたクラスとなります。

アプリ側で実際に使うのはMainActivity_の方なので、

<activity
       android:name="com.example.example_an2.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>

こんな感じで、AndroidManifest.xmlで指定するActivityのnameを編集する必要があります。


あと、継承したクラスを利用するのでprivate修飾子をつけたメソッドなどが使えない事になります。

この2点に気をつければ大丈夫かと思います。



@EActivityを適用したことにより他にも便利なことができるのですが、それは次回以降に回したいと思います。