Android
RoboGuice
Suche…
Einfaches Beispiel
RoboGuice ist ein Framework, das die Einfachheit und Leichtigkeit von Dependency Injection mit Googles Guice-Bibliothek für Android ermöglicht.
@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 );
}
}
Installation für Gradle-Projekte
Fügen Sie dem Abhängigkeitsabschnitt Ihrer Gradle Build-Datei den folgenden Pom hinzu:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentView-Anmerkung
Die @ContentView-Annotation kann verwendet werden, um die Entwicklung von Aktivitäten weiter zu erleichtern und die setContentView-Anweisung zu ersetzen:
@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-Anmerkung
Sie können beliebige Ressourcentypen, Strings, Animationen, Drawables usw. einfügen.
Um Ihre erste Ressource in eine Aktivität einzuspeisen, müssen Sie:
- Vererben von RoboActivity
- Kommentieren Sie Ihre Ressourcen mit @InjectResource
Beispiel
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@InjectView-Anmerkung
Sie können jede Ansicht mithilfe der Annotation @InjectView einfügen:
Sie müssen:
- Vererben von RoboActivity
- Legen Sie Ihre Inhaltsansicht fest
- Kommentieren Sie Ihre Ansichten mit @InjectView
Beispiel
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Einführung in RoboGuice
RoboGuice
ist ein Framework, das die Einfachheit und Leichtigkeit von Dependency Injection mit Googles Guice-Bibliothek für Android ermöglicht.
RoboGuice 3 reduziert Ihren Anwendungscode. Weniger Code bedeutet weniger Möglichkeiten für Fehler. Ihr Code wird dadurch auch leichter nachvollzogen - Ihr Code ist nicht mehr mit den Mechanismen der Android-Plattform übersät, sondern kann sich jetzt auf die eigentliche Logik konzentrieren, die für Ihre Anwendung spezifisch ist.
Um Ihnen eine Idee zu geben, werfen Sie einen Blick auf dieses einfache Beispiel einer typischen 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 );
}
}
Dieses Beispiel umfasst 19 Zeilen Code. Wenn Sie versuchen, onCreate()
, müssen Sie fünf Zeilen der Boilerplate-Initialisierung überspringen, um die einzige zu finden, die wirklich wichtig ist: name.setText()
. Komplexe Aktivitäten können zu einem viel größeren Teil dieses Initialisierungscodes führen.
Vergleichen Sie dies mit derselben App, die mit 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 );
}
}
Das Ziel von RoboGuice ist es, Ihren Code zu Ihrer App zu machen, statt sich mit dem gesamten Initialisierungs- und Lebenszykluscode zu befassen, den Sie normalerweise in Android pflegen müssen.
Anmerkungen:
@ContentView-Anmerkung:
Die @ContentView-Annotation kann verwendet werden, um die Entwicklung von Aktivitäten weiter zu erleichtern und die setContentView-Anweisung zu ersetzen:
@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-Annotation:
Zuerst benötigen Sie eine Aktivität, die von RoboActivity erbt. Wenn Sie sich in Ihrem res / anim-Ordner eine Animation my_animation.xml befinden, können Sie diese nun mit einer Anmerkung referenzieren:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@Inject-Anmerkung:
Sie stellen sicher, dass Ihre Aktivitäten von RoboActivity ausgehen, und kommentieren Ihren System-Service-Member mit @Inject. Den Rest erledigt Roboguice.
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();
Neben Ansichten, Ressourcen, Diensten und anderen androidspezifischen Dingen kann RoboGuice alte Java-Objekte einfügen. Standardmäßig ruft Roboguice in Ihrem POJO keinen Argumentkonstruktor auf
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}