Android
RoboGuice
Zoeken…
Eenvoudig voorbeeld
RoboGuice is een framework dat de eenvoud en het gemak van Dependency Injection naar Android brengt, met behulp van Google's eigen Guice-bibliotheek.
@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 );
}
}
Installatie voor Gradle-projecten
Voeg de volgende pom toe aan de afhankelijkheden van je gradle-buildbestand:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentView-annotatie
De annotatie @ContentView kan worden gebruikt om de ontwikkeling van activiteiten verder te verlichten en de setContentView-instructie te vervangen:
@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 annotatie
U kunt elk type bron, tekenreeksen, animaties, tekenreeksen, etc. injecteren
Om uw eerste bron in een activiteit te injecteren, moet u:
- Overnemen van RoboActivity
- Annoteer uw bronnen met @InjectResource
Voorbeeld
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@InjectView-annotatie
U kunt elke weergave injecteren met de annotatie @InjectView:
U moet:
- Overnemen van RoboActivity
- Stel uw inhoudsweergave in
- Annoteer uw weergaven met @InjectView
Voorbeeld
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Inleiding tot RoboGuice
RoboGuice
is een framework dat de eenvoud en het gemak van Dependency Injection naar Android brengt, met behulp van Google's eigen Guice-bibliotheek.
RoboGuice 3 versmalt uw applicatiecode. Minder code betekent minder kansen voor bugs. Het maakt ook uw code gemakkelijker te volgen - niet langer is uw code bezaaid met de mechanica van het Android-platform, maar nu kan het zich concentreren op de eigenlijke logica die uniek is voor uw toepassing.
Om je een idee te geven, bekijk dit eenvoudige voorbeeld van een typische 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 );
}
}
Dit voorbeeld is 19 coderegels. Als u onCreate()
wilt doorlezen, moet u 5 regels boilerplate-initialisatie overslaan om de enige te vinden die er echt toe doet: name.setText()
. En complexe activiteiten kunnen veel meer van dit soort initialisatiecode opleveren.
Vergelijk dit met dezelfde app, geschreven met 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 );
}
}
Het doel van RoboGuice is om ervoor te zorgen dat uw code over uw app gaat, en niet over alle initialisatie- en levenscycluscode die u doorgaans in Android moet onderhouden.
aantekeningen:
@ContentView-annotatie:
De annotatie @ContentView kan worden gebruikt om de ontwikkeling van activiteiten verder te verlichten en de setContentView-instructie te vervangen:
@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 annotatie:
Eerst hebt u een activiteit nodig die overneemt van RoboActivity. Ervan uitgaande dat je een animatie my_animation.xml in je res / anim-map hebt, kun je er nu naar verwijzen met een annotatie:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@Inject annotatie:
U zorgt ervoor dat uw activiteit zich uitstrekt van RoboActivity en annoteert uw System-servicelid met @Inject. Roboguice doet de rest.
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();
Naast Views, Resources, Services en andere Android-specifieke dingen, kan RoboGuice gewone oude Java-objecten injecteren. Standaard zal Roboguice een constructeur zonder argument aanroepen op uw POJO
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}