Zoeken…


Eenvoudig voorbeeld

RoboGuice is een framework dat de eenvoud en het gemak van Dependency Injection naar Android brengt, met behulp van Google's eigen Guice-bibliotheek.

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

Installatie voor Gradle-projecten

Voeg de volgende pom toe aan de afhankelijkheden van je gradle-buildbestand:

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

@ContentView-annotatie

De annotatie @ContentView kan worden gebruikt om de ontwikkeling van activiteiten verder te verlichten en de setContentView-instructie te vervangen:

@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 annotatie

U kunt elk type bron, tekenreeksen, animaties, tekenreeksen, etc. injecteren

Om uw eerste bron in een activiteit te injecteren, moet u:

  • Overnemen van RoboActivity
  • Annoteer uw bronnen met @InjectResource

Voorbeeld

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

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

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

@InjectView-annotatie

U kunt elke weergave injecteren met de annotatie @InjectView:

U moet:

  • Overnemen van RoboActivity
  • Stel uw inhoudsweergave in
  • Annoteer uw weergaven met @InjectView

Voorbeeld

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

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

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

Inleiding tot RoboGuice

RoboGuice is een framework dat de eenvoud en het gemak van Dependency Injection naar Android brengt, met behulp van Google's eigen Guice-bibliotheek.

RoboGuice 3 versmalt uw applicatiecode. Minder code betekent minder kansen voor bugs. Het maakt ook uw code gemakkelijker te volgen - niet langer is uw code bezaaid met de mechanica van het Android-platform, maar nu kan het zich concentreren op de eigenlijke logica die uniek is voor uw toepassing.

Om je een idee te geven, bekijk dit eenvoudige voorbeeld van een typische 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 ); 
        } 
    }

Dit voorbeeld is 19 coderegels. Als u onCreate() wilt doorlezen, moet u 5 regels boilerplate-initialisatie overslaan om de enige te vinden die er echt toe doet: name.setText() . En complexe activiteiten kunnen veel meer van dit soort initialisatiecode opleveren.

Vergelijk dit met dezelfde app, geschreven met 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 ); 
        } 
    }

Het doel van RoboGuice is om ervoor te zorgen dat uw code over uw app gaat, en niet over alle initialisatie- en levenscycluscode die u doorgaans in Android moet onderhouden.

aantekeningen:

@ContentView-annotatie:

De annotatie @ContentView kan worden gebruikt om de ontwikkeling van activiteiten verder te verlichten en de setContentView-instructie te vervangen:

@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 annotatie:

Eerst hebt u een activiteit nodig die overneemt van RoboActivity. Ervan uitgaande dat je een animatie my_animation.xml in je res / anim-map hebt, kun je er nu naar verwijzen met een annotatie:

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

@Inject annotatie:

U zorgt ervoor dat uw activiteit zich uitstrekt van RoboActivity en annoteert uw System-servicelid met @Inject. Roboguice doet de rest.

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

Naast Views, Resources, Services en andere Android-specifieke dingen, kan RoboGuice gewone oude Java-objecten injecteren. Standaard zal Roboguice een constructeur zonder argument aanroepen op uw 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow