Recherche…


Exemple simple

RoboGuice est un framework qui apporte la simplicité et la facilité de Dependency Injection à Android, en utilisant la propre bibliothèque 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 ); 
    } 
} 

Installation pour les projets Gradle

Ajoutez le pom suivant à la section dépendances de votre fichier de construction gradle:

project.dependencies {
    compile 'org.roboguice:roboguice:3.+'
    provided 'org.roboguice:roboblender:3.+'
}

Annotation @ContentView

L'annotation @ContentView peut être utilisée pour améliorer davantage le développement des activités et remplacer l'instruction 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 annotation

Vous pouvez injecter tout type de ressource, Strings, Animations, Drawables, etc.

Pour injecter votre première ressource dans une activité, vous devez:

  • Hériter de RoboActivity
  • Annotez vos ressources avec @InjectResource

Exemple

@InjectResource(R.string.app_name) String name;

@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;

@InjectResource(R.anim.my_animation) Animation myAnimation;

Annotation @InjectView

Vous pouvez injecter n'importe quelle vue à l'aide de l'annotation @InjectView:

Vous devrez:

  • Hériter de RoboActivity
  • Définir votre vue de contenu
  • Annotez vos vues avec @InjectView

Exemple

@InjectView(R.id.textView1) TextView textView1;

@InjectView(R.id.textView2) TextView textView2;

@InjectView(R.id.imageView1) ImageView imageView1;

Introduction à RoboGuice

RoboGuice est un framework qui apporte la simplicité et la facilité de Dependency Injection à Android, en utilisant la propre bibliothèque Guice de Google.

RoboGuice 3 réduit votre code d'application. Moins de code signifie moins d'opportunités pour les bogues. Il rend également votre code plus facile à suivre - votre code n’est plus encombré des mécanismes de la plate-forme Android, mais il peut désormais se concentrer sur la logique propre à votre application.

Pour vous donner une idée, jetez un coup d’œil à cet exemple simple d’une Activity Android typique:

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

Cet exemple est composé de 19 lignes de code. Si vous essayez de lire onCreate() , vous devez ignorer 5 lignes d'initialisation standard pour trouver la seule qui compte vraiment: name.setText() . Et les activités complexes peuvent aboutir à beaucoup plus de ce type de code d'initialisation.

Comparez cela à la même application, écrite à l'aide de 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'objectif de RoboGuice est de faire en sorte que votre code concerne votre application, plutôt que d'être à propos de tout le code d'initialisation et de cycle de vie que vous devez généralement conserver dans Android.

Annotations:

Annotation @ContentView:

L'annotation @ContentView peut être utilisée pour améliorer davantage le développement des activités et remplacer l'instruction 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!");
        }
    }

Annotation @InjectResource:

Tout d'abord, vous avez besoin d'une activité qui hérite de RoboActivity. Ensuite, en supposant que vous ayez une animation my_animation.xml dans votre dossier res / anim, vous pouvez maintenant la référencer avec une annotation:

public class MyActivity extends RoboActivity {
    @InjectResource(R.anim.my_animation) Animation myAnimation;
    // the rest of your code
}

Annotation @Inject:

Assurez-vous que votre activité s'étend à partir de RoboActivity et annotez votre membre du service système avec @Inject. Roboguice fera le reste.

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

En plus des vues, des ressources, des services et d’autres éléments spécifiques à Android, RoboGuice peut injecter des objets Java simples. Par défaut, Roboguice appelle un constructeur sans argument sur votre 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow