Android
RoboGuice
Recherche…
Exemple simple
RoboGuice est un framework qui apporte la simplicité et la facilité de Dependency Injection à Android, en utilisant la propre bibliothèque Guice de Google.
@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 pour les projets Gradle
Ajoutez le pom suivant à la section dépendances de votre fichier de construction gradle:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
Annotation @ContentView
L'annotation @ContentView peut être utilisée pour améliorer davantage le développement des activités et remplacer l'instruction 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 annotation
Vous pouvez injecter tout type de ressource, Strings, Animations, Drawables, etc.
Pour injecter votre première ressource dans une activité, vous devez:
- Hériter de RoboActivity
- Annotez vos ressources avec @InjectResource
Exemple
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
Annotation @InjectView
Vous pouvez injecter n'importe quelle vue à l'aide de l'annotation @InjectView:
Vous devrez:
- Hériter de RoboActivity
- Définir votre vue de contenu
- Annotez vos vues avec @InjectView
Exemple
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Introduction à RoboGuice
RoboGuice
est un framework qui apporte la simplicité et la facilité de Dependency Injection à Android, en utilisant la propre bibliothèque Guice de Google.
RoboGuice 3 réduit votre code d'application. Moins de code signifie moins d'opportunités pour les bogues. Il rend également votre code plus facile à suivre - votre code n’est plus encombré des mécanismes de la plate-forme Android, mais il peut désormais se concentrer sur la logique propre à votre application.
Pour vous donner une idée, jetez un coup d’œil à cet exemple simple d’une Activity
Android typique:
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 );
}
}
Cet exemple est composé de 19 lignes de code. Si vous essayez de lire onCreate()
, vous devez ignorer 5 lignes d'initialisation standard pour trouver la seule qui compte vraiment: name.setText()
. Et les activités complexes peuvent aboutir à beaucoup plus de ce type de code d'initialisation.
Comparez cela à la même application, écrite à l'aide de 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 );
}
}
L'objectif de RoboGuice est de faire en sorte que votre code concerne votre application, plutôt que d'être à propos de tout le code d'initialisation et de cycle de vie que vous devez généralement conserver dans Android.
Annotations:
Annotation @ContentView:
L'annotation @ContentView peut être utilisée pour améliorer davantage le développement des activités et remplacer l'instruction 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!");
}
}
Annotation @InjectResource:
Tout d'abord, vous avez besoin d'une activité qui hérite de RoboActivity. Ensuite, en supposant que vous ayez une animation my_animation.xml dans votre dossier res / anim, vous pouvez maintenant la référencer avec une annotation:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
Annotation @Inject:
Assurez-vous que votre activité s'étend à partir de RoboActivity et annotez votre membre du service système avec @Inject. Roboguice fera le reste.
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();
En plus des vues, des ressources, des services et d’autres éléments spécifiques à Android, RoboGuice peut injecter des objets Java simples. Par défaut, Roboguice appelle un constructeur sans argument sur votre POJO.
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}