Android
RoboGuice
Ricerca…
Semplice esempio
RoboGuice è un framework che porta la semplicità e la facilità di Dependency Injection su Android, utilizzando la libreria Guice di 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 );
}
}
Installazione per progetti Gradle
Aggiungi il seguente pom alla sezione delle dipendenze del tuo file build gradle:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentView annotation
L'annotazione @ContentView può essere utilizzata per alleviare ulteriormente lo sviluppo delle attività e sostituire l'istruzione 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!");
}
}
Annotazione @InjectResource
È possibile iniettare qualsiasi tipo di risorsa, stringhe, animazioni, disegni, ecc.
Per iniettare la tua prima risorsa in un'attività, dovrai:
- Eredita da RoboActivity
- Annota le tue risorse con @InjectResource
Esempio
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@ Annotazione di InjectView
È possibile iniettare qualsiasi vista utilizzando l'annotazione @InjectView:
Avrai bisogno di:
- Eredita da RoboActivity
- Imposta la visualizzazione del contenuto
- Annota le tue viste con @InjectView
Esempio
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Introduzione a RoboGuice
RoboGuice
è un framework che porta la semplicità e la facilità di Dependency Injection su Android, utilizzando la libreria Guice di Google.
RoboGuice 3 riduce il codice dell'applicazione. Meno codice significa minori opportunità di bug. Rende anche più semplice il tuo codice da seguire - non è più il tuo codice ingombrato dai meccanismi della piattaforma Android, ma ora può concentrarsi sulla logica effettiva esclusiva della tua applicazione.
Per darti un'idea, dai un'occhiata a questo semplice esempio di una tipica Activity
Android:
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 );
}
}
Questo esempio è composto da 19 righe di codice. Se stai cercando di leggere su onCreate()
, devi saltare più di 5 righe di inizializzazione di default per trovare l'unico che conta davvero: name.setText()
. E le attività complesse possono finire con molto più di questo tipo di codice di inizializzazione.
Confronta questo con la stessa app, scritta usando 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'obiettivo di RoboGuice è quello di rendere il tuo codice sulla tua app, piuttosto che su tutto il codice di inizializzazione e ciclo di vita che devi mantenere in Android.
annotazioni:
Annotazione @ContentView:
L'annotazione @ContentView può essere utilizzata per alleviare ulteriormente lo sviluppo delle attività e sostituire l'istruzione 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!");
}
}
Annotazione @InjectResource:
Per prima cosa è necessaria un'attività che erediti da RoboActivity. Quindi, assumendo che tu abbia un'animazione my_animation.xml nella tua cartella res / anim, ora puoi fare riferimento ad essa con un'annotazione:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
Annotazione @Inject:
Assicurati che la tua attività si estenda da RoboActivity e annoti il tuo membro del servizio di sistema con @Inject. Roboguice farà il resto.
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();
Oltre a Views, risorse, servizi e altre cose specifiche per Android, RoboGuice può iniettare Plain Old Java Objects. Di default Roboguice chiamerà un costruttore no argument sul tuo POJO
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}