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();
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow