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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow