Android
RoboGuice
Поиск…
Простой пример
RoboGuice - это основа, которая обеспечивает простоту и удобство Injection Dependency для Android, используя собственную библиотеку Guice от 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 );
}
}
Установка для проектных решений
Добавьте следующий pom в раздел зависимостей вашего файла построения градиента:
project.dependencies {
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
}
Аннотация @ContentView
Аннотацию @ContentView можно использовать для дальнейшего облегчения разработки действий и замены оператора 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 аннотация
Вы можете вводить любые типы ресурсов, строки, анимации, чертежи и т. Д.
Чтобы ввести свой первый ресурс в действие, вам необходимо:
- Наследовать от RoboActivity
- Аннотируйте свои ресурсы с помощью @InjectResource
пример
@InjectResource(R.string.app_name) String name;
@InjectResource(R.drawable.ic_launcher) Drawable icLauncher;
@InjectResource(R.anim.my_animation) Animation myAnimation;
Аннотация @InjectView
Вы можете вводить любое представление с помощью аннотации @InjectView:
Вам необходимо:
- Наследовать от RoboActivity
- Настройка просмотра содержимого
- Аннотируйте свои представления с помощью @InjectView
пример
@InjectView(R.id.textView1) TextView textView1;
@InjectView(R.id.textView2) TextView textView2;
@InjectView(R.id.imageView1) ImageView imageView1;
Введение в RoboGuice
RoboGuice
- это основа, которая обеспечивает простоту и удобство Injection Dependency для Android, используя собственную библиотеку Guice от Google.
RoboGuice 3 сокращает ваш код приложения. Меньше кода означает меньше возможностей для ошибок. Это также упрощает работу с вашим кодом - теперь ваш код не мешает механике платформы Android, но теперь он может сосредоточиться на фактической логике, уникальной для вашего приложения.
Чтобы дать вам представление, взгляните на этот простой пример типичной 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 );
}
}
Этот пример - 19 строк кода. Если вы пытаетесь прочитать onCreate()
, вам нужно пропустить более 5 строк инициализации шаблона, чтобы найти единственное, что действительно имеет значение: name.setText()
. И сложные действия могут в конечном итоге получить гораздо больше такого типа кода инициализации.
Сравните это с тем же приложением, написанным с помощью 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 );
}
}
Цель RoboGuice заключается в том, чтобы сделать ваш код более удобным для вашего приложения, а не для всего кода инициализации и жизненного цикла, который, как правило, требуется для поддержки в Android.
Аннотации:
Аннотации @ContentView:
Аннотацию @ContentView можно использовать для дальнейшего облегчения разработки действий и замены оператора 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 аннотация:
Сначала вам нужна операция, которая наследуется от RoboActivity. Затем, предположив, что у вас есть анимация my_animation.xml в папке res / anim, вы можете теперь ссылаться на нее с аннотацией:
public class MyActivity extends RoboActivity {
@InjectResource(R.anim.my_animation) Animation myAnimation;
// the rest of your code
}
@ Вводная аннотация:
Вы убедитесь, что ваша деятельность простирается от RoboActivity и аннотирует члена службы System с помощью @Inject. Roboguice сделает все остальное.
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();
В дополнение к представлениям, ресурсам, службам и другим специфичным для Android задачам RoboGuice может вводить обычные объекты Java. По умолчанию Roboguice вызовет конструктор аргументов no вашего POJO
class MyActivity extends RoboActivity {
@Inject Foo foo; // this will basically call new Foo();
}