Android
RoboGuice
サーチ…
簡単な例
RoboGuiceは、Google独自のGuiceライブラリを使用して、Androidへの依存性注入のシンプルさと容易さをもたらすフレームワークです。
@ContentView(R.layout.main)
class RoboWay extends RoboActivity {
@InjectView(R.id.name) TextView name;
@InjectView(R.id.thumbnail) ImageView thumbnail;
@InjectResource(R.drawable.icon) Drawable icon;
@InjectResource(R.string.app_name) String myName;
@Inject LocationManager loc;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
name.setText( "Hello, " + myName );
}
}
Gradleプロジェクトのインストール
あなたのgradleビルドファイルの依存関係セクションに次のpomを追加してください:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentViewアノテーション
@ContentViewアノテーションを使用すると、アクティビティの開発をさらに緩和し、setContentView文を置き換えることができます。
@ContentView(R.layout.myactivity_layout)
public class MyActivity extends RoboActivity {
@InjectView(R.id.text1) TextView textView;
@Override
protected void onCreate( Bundle savedState ) {
textView.setText("Hello!");
}
}
@InjectResourceアノテーション
任意のタイプのリソース、文字列、アニメーション、描画可能なものなどを注入できます。
最初のリソースをアクティビティに挿入するには、次の作業が必要です。
- RoboActivityから継承
- @InjectResourceでリソースに注釈を付ける
例
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@InjectViewアノテーション
@InjectViewアノテーションを使用して任意のビューを挿入することができます:
あなたは以下を行う必要があります:
- RoboActivityから継承
- コンテンツビューを設定する
- @InjectViewでビューに注釈を付ける
例
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
RoboGuiceの紹介
RoboGuice
は、Google独自のGuiceライブラリを使用して、Androidへの依存性注入のシンプルさと容易さをもたらすフレームワークです。
RoboGuice 3はアプリケーションコードをスリム化します。コードが少なくても、バグの機会は少なくなります。また、コードを簡単にフォローすることができます。コードはもはやAndroidプラットフォームの仕組みではなく、アプリケーション固有の実際のロジックに焦点を当てることができます。
あなたにアイデアを伝えるために、典型的なAndroid Activity
この簡単な例を見てみましょう:
class AndroidWay extends Activity {
TextView name;
ImageView thumbnail;
LocationManager loc;
Drawable icon;
String myName;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
name = (TextView) findViewById(R.id.name);
thumbnail = (ImageView) findViewById(R.id.thumbnail);
loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);
icon = getResources().getDrawable(R.drawable.icon);
myName = getString(R.string.app_name);
name.setText( "Hello, " + myName );
}
}
この例は19行のコードです。 onCreate()
を読もうとしている場合は、5行の定型文の初期化をスキップして、重要な唯一のものを見つけなければなりません: name.setText()
。そして、複雑なアクティビティはこの種の初期化コードの多くをもたらす可能性があります。
これをRoboGuice
を使って書かれた同じアプリと比較する:
@ContentView(R.layout.main)
class RoboWay extends RoboActivity {
@InjectView(R.id.name) TextView name;
@InjectView(R.id.thumbnail) ImageView thumbnail;
@InjectResource(R.drawable.icon) Drawable icon;
@InjectResource(R.string.app_name) String myName;
@Inject LocationManager loc;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
name.setText( "Hello, " + myName );
}
}
RoboGuiceの目標は、Androidで一般的に維持する必要があるすべての初期化とライフサイクルコードについてではなく、あなたのコードをあなたのアプリにすることです。
注釈:
@ContentView注釈:
@ContentViewアノテーションを使用すると、アクティビティの開発をさらに緩和し、setContentView文を置き換えることができます。
@ContentView(R.layout.myactivity_layout)
public class MyActivity extends RoboActivity {
@InjectView(R.id.text1) TextView textView;
@Override
protected void onCreate( Bundle savedState ) {
textView.setText("Hello!");
}
}
@InjectResourceアノテーション:
まず、RoboActivityを継承するアクティビティが必要です。次に、あなたのres / animフォルダにアニメーションmy_animation.xmlがあると仮定して、アノテーションを付けて参照できます。
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@注釈注釈:
あなたの活動がRoboActivityから拡張されていることを確認し、システムサービスのメンバーに@Injectを注釈します。ロボグイスは残りのことをします。
class MyActivity extends RoboActivity {
@Inject Vibrator vibrator;
@Inject NotificationManager notificationManager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// we can use the instances directly!
vibrator.vibrate(1000L); // RoboGuice took care of the getSystemService(VIBRATOR_SERVICE)
notificationManager.cancelAll();
ビュー、リソース、サービス、およびその他のアンドロイド固有のものに加えて、RoboGuiceはPlain Old Java Objectsをインジェクトすることができます。デフォルトでは、RoboguiceはあなたのPOJOで引数なしのコンストラクタを呼び出します
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}