Android
RoboGuice
Szukaj…
Prosty przykład
RoboGuice to platforma, która zapewnia prostotę i łatwość wstrzykiwania zależności w systemie Android przy użyciu własnej biblioteki Google Guice.
@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 );
}
}
Instalacja dla projektów Gradle
Dodaj następujący pom do sekcji zależności pliku kompilacji stopni:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
@ContentView adnotacja
Adnotacji @ContentView można użyć w celu dalszego usprawnienia rozwoju działań i zastąpienia instrukcji 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 adnotation
Możesz wstrzykiwać dowolne zasoby, ciągi, animacje, rysunki itp.
Aby wstrzyknąć pierwszy zasób do działania, musisz:
- Dziedzicz z RoboActivity
- Opisz swoje zasoby za pomocą @InjectResource
Przykład
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
@InjectView adnotacja
Możesz wstrzyknąć dowolny widok za pomocą adnotacji @InjectView:
Musisz:
- Dziedzicz z RoboActivity
- Ustaw widok zawartości
- Opisz swoje widoki za pomocą @InjectView
Przykład
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Wprowadzenie do RoboGuice
RoboGuice
to platforma, która zapewnia prostotę i łatwość wstrzykiwania zależności w Androidzie przy użyciu własnej biblioteki Google Guice.
RoboGuice 3 wyszczupla kod aplikacji. Mniej kodu oznacza mniej okazji do błędów. Ułatwia także śledzenie kodu - kod nie jest już zaśmiecony mechaniką platformy Android, ale teraz może skupić się na logice właściwej dla Twojej aplikacji.
Aby dać Ci pomysł, spójrz na ten prosty przykład typowego Activity
Androida:
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 );
}
}
Ten przykład to 19 linii kodu. Jeśli próbujesz odczytać onCreate()
, musisz pominąć 5 wierszy inicjalizacji name.setText()
aby znaleźć jedyny, który naprawdę ma znaczenie: name.setText()
. A złożone działania mogą skończyć się znacznie większą ilością tego rodzaju kodu inicjującego.
Porównaj to z tą samą aplikacją napisaną przy użyciu 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 );
}
}
Celem RoboGuice jest sprawienie, aby kod dotyczył Twojej aplikacji, a nie całego kodu inicjalizacji i cyklu życia, który zwykle musisz utrzymywać w Androidzie.
Adnotacje:
Adnotacja @ContentView:
Adnotacji @ContentView można użyć w celu dalszego usprawnienia rozwoju działań i zastąpienia instrukcji 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!");
}
}
Adnotacja @InjectResource:
Najpierw potrzebujesz działania, które dziedziczy po RoboActivity. Następnie, zakładając, że w folderze res / anim masz animację my_animation.xml, możesz teraz odwoływać się do niej z adnotacją:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@ Wstaw adnotację:
Upewnij się, że Twoja działalność wykracza poza RoboActivity, i dodaj adnotację do członka usługi systemowej @Inject. Roboguice zrobi resztę.
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();
Oprócz widoków, zasobów, usług i innych rzeczy specyficznych dla Androida RoboGuice może wstrzykiwać zwykłe stare obiekty Java. Domyślnie Roboguice wywoła konstruktor no argument na twoim POJO
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}