LoginSignup
99
103

More than 5 years have passed since last update.

AndroidAnnotationsでよく利用するアノテーション

Last updated at Posted at 2014-12-30

AndroidAnnotations

AndroidAnnotationsはAndroidの開発でよく記述するお決まりの処理を
アノテーションを利用することで自動的に生成してくれるライブラリ

公式サイト

アノテーション一覧

@EActivity, @EFragment

Activity(Fragment)につけると指定したレイアウトファイルを読み込んでくれる
またAndroidAnnotationsのアノテーションを利用するにはActivity, Fragmentにこのアノテーションをつける必要がある

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

@EBean

Activity, Fragment以外のクラスでAndroidAnnotationsのアノテーションを利用するときにつける
このアノテーションをつけたクラスは同じく@EBeanをつけることで取得できる

※ このアノテーションをつけたクラスは、引数なしまたはContextを受け取るだけのコンストラクタを1つしか定義できない

@EBean
public class MyClass {
}

@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
  @EBean
  MyClass myClass;
}

@ViewById

Viewの変数の宣言につけるとfindViewByIdを自動的に行ってくれる
下記の例では
button = findViewById(R.id.button)
を自動的に行ってくれる

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

  @ViewById(R.id.button)
  Button button;
}

@Click, @LongClick

メソッドにつけると、指定したViewがクリックされたときのそのメソッドを呼ぶようになる

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

  @ViewById(R.id.button)
  Button button;

  @Click(R.id.button)
  public void doProcessing(View view) {}
}

@AfterViews, @AfterInject

メソッドにつけるとレイアウトの読み込みやfindViewByIdなどが終わった後にそのメソッドが実行される

@EBeanをつけたクラスの場合は@AfterInjectを利用する

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

  @AfterViews
  public void afterViews() {}

}

@Extra, @FragmentArg

プロパティ変数の宣言につけて、intentからデータを取得する
intent.putExtra("key1", "text1")
と設定した上で画面を遷移すると下記のようにしてデータを取得することができる
Fragmentの場合はsetArguments()で渡したデータが取得できる

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

  @Extra(value="key1")
  String text1; 

  @Extra(value="key2")
  String text2 = "default text"; // key2が見つからなければ"default text"が入る"

}

@SystemService

getSystemServiceで取得できる各種インスタンスを取得する
変数の型を見て自動的に取得するインスタンスを判別してくれるので特に引数の指定などはない

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

  @SystemService
  LayoutInflater inflater;

}

@StringRes, @StringArrayRes

getString(R.string.text), getStringArray(R.array.texts)を自動でやってくれる。

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

  @StringRes(R.string.text)
  String text;

  @StringArrayRes(R.array.texts)
  String[] texts;

}

@UiThread

このアノテーションをつけたメソッドはUIスレッド上で実行されるようになる

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

  @UiThread
  public void uiThreadProcessing(){}

}

下記のようにHandlerを通じて実行されるようにコードが生成される

handler.post(new Runnable(){
  @Override
  public void run(){
    uiThreadProcessing();
  }
});

@Background

このアノテーションをつけたメソッドはバックグラウンドで実行されるようになる

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

  @Background
  public void backgroundProcessing(){}

}
99
103
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
99
103