Android
RoboGuice
Sök…
Enkelt exempel
RoboGuice är ett ramverk som ger enkelhet och enkelhet med beroende injektion till Android, med Googles eget Guice-bibliotek.
@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 Projects
Lägg till följande pom till beroendeavsnittet i din gradle build-fil:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentView-kommentar
@ContentView-anteckningen kan användas för att ytterligare lindra utvecklingen av aktiviteter och ersätta setContentView-uttalandet:
@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-kommentar
Du kan injicera alla typer av resurser, strängar, animationer, teckningar etc.
För att injicera din första resurs i en aktivitet måste du:
- Arv från RoboActivity
- Kommentera dina resurser med @InjectResource
Exempel
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@InjectView-kommentar
Du kan injicera valfri vy med @InjectView-kommentaren:
Du måste:
- Arv från RoboActivity
- Ställ in din innehållsvy
- Kommentera dina vyer med @InjectView
Exempel
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Introduktion till RoboGuice
RoboGuice
är ett ramverk som ger enkelhet och enkelhet med beroende injektion till Android, med Googles eget Guice-bibliotek.
RoboGuice 3 tappar ner din applikationskod. Mindre kod betyder färre möjligheter för buggar. Det gör också din kod lättare att följa - inte längre är din kod besatt med Android-plattformens mekanik, men nu kan den fokusera på den faktiska logiken som är unik för din applikation.
För att ge dig en idé, ta en titt på detta enkla exempel på en typisk 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 );
}
}
Detta exempel är 19 kodrader. Om du försöker läsa igenom onCreate()
måste du hoppa över fem rader med initialisering av pannplattan för att hitta den enda som verkligen betyder: name.setText()
. Och komplexa aktiviteter kan sluta med mycket mer av den här typen av initialiseringskod.
Jämför detta med samma app, skriven med 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 );
}
}
RoboGuices mål är att få din kod att handla om din app, snarare än att handla om alla initialiserings- och livscykelkoder som du vanligtvis måste behålla i Android.
anteckningar:
@ContentView-kommentar:
@ContentView-anteckningen kan användas för att ytterligare lindra utvecklingen av aktiviteter och ersätta setContentView-uttalandet:
@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-kommentar:
Först behöver du en aktivitet som ärver från RoboActivity. Sedan, förutsatt att du har en animation my_animation.xml i din res / animmapp, kan du nu referera till den med en kommentar:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@ Infoga kommentar:
Du ser till att din aktivitet sträcker sig från RoboActivity och kommenterar din systemtjänstmedlem med @Inject. Roboguice kommer att göra resten.
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();
Förutom vyer, resurser, tjänster och andra Android-specifika saker kan RoboGuice injicera vanliga gamla Java-objekt. Som standard kommer Roboguice att anropa en ingen argumentkonstruktör på din POJO
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}