Android
RoboGuice
Buscar..
Ejemplo simple
RoboGuice es un marco que aporta la simplicidad y facilidad de inyección de dependencia a Android, utilizando la propia biblioteca 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 );
}
}
Instalación para proyectos Gradle
Agregue el siguiente pom a la sección de dependencias de su archivo de compilación de gradle:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentView anotación
La anotación @ContentView se puede usar para aliviar aún más el desarrollo de actividades y reemplazar la declaración 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 anotación
Puede inyectar cualquier tipo de recurso, cadenas, animaciones, dibujos, etc.
Para inyectar su primer recurso en una actividad, deberá:
- Heredar de RoboActivity
- Anota tus recursos con @InjectResource
Ejemplo
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@InjectView anotación
Puedes inyectar cualquier vista usando la anotación @InjectView:
Tendrá que:
- Heredar de RoboActivity
- Establece tu vista de contenido
- Anota tus vistas con @InjectView
Ejemplo
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Introducción a RoboGuice
RoboGuice
es un marco que aporta la simplicidad y facilidad de inyección de dependencia a Android, utilizando la propia biblioteca Guice de Google.
RoboGuice 3 reduce su código de aplicación. Menos código significa menos oportunidades para los errores. También hace que su código sea más fácil de seguir: ya no está su código lleno de la mecánica de la plataforma Android, pero ahora puede centrarse en la lógica real única de su aplicación.
Para darle una idea, echar un vistazo a este sencillo ejemplo de una típica 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 );
}
}
Este ejemplo es de 19 líneas de código. Si está intentando leer en onCreate()
, debe omitir más de 5 líneas de inicialización repetitiva para encontrar la única que realmente importa: name.setText()
. Y las actividades complejas pueden terminar con mucho más de este tipo de código de inicialización.
Compare esto con la misma aplicación, escrita con 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 );
}
}
El objetivo de RoboGuice es hacer que su código sea sobre su aplicación, en lugar de sobre todo el código de inicialización y ciclo de vida que normalmente tiene que mantener en Android.
Anotaciones:
@ContentView anotación:
La anotación @ContentView se puede usar para aliviar aún más el desarrollo de actividades y reemplazar la declaración 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 anotación:
Primero necesitas una Actividad que hereda de RoboActivity. Luego, asumiendo que tiene una animación mi_animación.xml en su carpeta res / anim, ahora puede hacer referencia a ella con una anotación:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@ Anotación en el proyecto:
Usted se asegura de que su actividad se extienda desde RoboActivity y haga anotaciones en su miembro del servicio del sistema con @Inject. Roboguice hará el 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();
Además de las Vistas, los Recursos, los Servicios y otras cosas específicas de Android, RoboGuice puede inyectar objetos Java antiguos y sencillos. Por defecto, Roboguice llamará a un constructor sin argumentos en su POJO
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}