This example implements the features and examples of the Android Roboguice use Guide (2): The first example Hello World, the difference is this example uses RoboGuice2.0 to implement.
To download the new Roboguice Library, the Roboguice2.0 library consists of four libraries, as shown in the following illustration:
Libraries can be downloaded from the http://code.google.com/p/roboguice/.
2. Create a new Android project, such as Guicedemo, target platform Android1.5 above.
3. In general, you can add a libs directory under the project, copy two jar files to the Libs directory, and then through: Project > Properties > Java build Path > Libraries > Add JARs
Note: Starting with ADT17, the added jar file needs to be placed under the Libs subdirectory, see the issue of dalvikvm:unable to resolve superclass for upgrade to ADT 17
After adding references to the Guice and roboguice libraries, you can start writing the first example that uses Roboguice2.
Steps to use Roboguice2:
Roboguice2 does not contain roboapplication classes, so it is unnecessary and impossible to derive roboapplication subclasses. Here's a repeat of HelloWorld's layout and class descriptions.
1. In this simple example, it uses the layout definition as follows:
<?xml version= "1.0″encoding=" utf-8″?>
< LinearLayout xmlns:android= "Http://schemas.android.com/apk/res/android"
android:orientation= "Vertical"
Android:layout_width= "Fill_parent"
android:layout_height= "Fill_parent"
>
<textview
Android:id= "@+id/hello"
Android:layout_width= "Fill_parent"
android:layout_height= "Wrap_content"
android:text= "@string/hello"
/>
</linearlayout>
We have defined a textview, and its ID is hello.
Assuming that this application uses a igreetingservice, it has a method getgreeting () returns a string, as for Igreetingservice How to implement, Guidedemo does not need to care.
One of the core principles of the Dependency injection design pattern is: Separate behavior from Dependency resolution. It also says that the functionality to be implemented is decoupled from the services or other objects it relies on. For this example Guicedemo just know that it relies on igreetingservice services, as for Igreetingservice who realizes Guicedemo does not need to know.
Use @inject in Roboguice to represent this dependency.
public class Guicedemo extends roboactivity {
@InjectView (R.id.hello) TextView Hellolabel;
@Inject Igreetingservice Greetingservce;
@Override public
void OnCreate (Bundle savedinstancestate) {
super.oncreate (savedinstancestate);
Setcontentview (r.layout.main);
Hellolabel.settext (Greetingservce.getgreetings ());
}
An activity that uses roboguice needs to be derived from roboactivity (Roboactivity is a subclass of the activity).
Using the @inject annotation Greetingservce relies on the Igreetingservice service
Using @injectview to represent Hellolabel dependent on R.id.hello (XML)
There is no code in the code to create the Greetingservce object (such as New XXX ()) and the code to assign a value to Hellolabel. These values can be roboguice automatic creation and assignment injection (inject) into the variable.
To illustrate the problem, we add two implementations of Getgreetings to the code, one for HelloWorld and one for Hellochina:
Public
class Hellochina implements igreetingservice{
@Override public
String getgreetings () {
return "Hello,china";
}
}
public class HelloWorld implements igreetingservice{
@Override public
String getgreetings () {return
" Hello,world ";
}
}