Android uygulamalarda roboguice kullanımı

Android uygulamalarda Java kodundan layout dosyalarında tanımlanmış görsel öğelere erişmek için en çok kullandığımız yöntem findViewById metodunu çağırmaktır. Bu metodu kullandığımızda bize geriye View nesnesi döner. Yani dönen nesne bir giriş kutusu (EditText) elemanı olabileceği gibi bir düğme (Button) veya bir işaret kutusu (Checkbox) da olabilir.

İstediğimiz görsel elemanın özelliklerini kullanabilmek için ise explicit casting yaparız. Örneğin bir düğmeye tıklandığında çalışmasını istediğimiz kod bloğu varsa, düğmeye erişmek için önce aşağıdaki kodu yazarız.

[codesyntax lang=”java” lines=”no”]

Button button = (Button) findViewById(R.id.button1);

[/codesyntax]

Yalnız bu şekilde bir kod yazdığımızda id’si button1 olan View nesnesi bize dönecektir. Dönen View bir Button nesnesi değilse çalışma anında hata alırız.

Bu hatalardan kurtulmak için geliştirilmiş Roboguice Framework‘u ile nesnelerimizi CDI ile yaratabiliriz. Dolayısı ile yukarıdaki gibi bir kodlama yerine sadece ilgili annotationlar kullanarak nesnelerimize erişebiliriz.

Roboguice kullanmak için tek yapmamız gereken framework’un kütüphanelerini uygulamamızın build path’ine koymak, Activity sınıfımızı RoboActivity sınıfından türetmek ve ilgili annotation‘ları çağırmaktır.

Örneğin Java sınıfından eriştiğimiz bir Button nesnesinin kodunu aşağıdaki gibi yazabiliriz.

[codesyntax lang=”java” lines=”no”]

@InjectView(R.id.btnGoster)
private Button btnGoster;

[/codesyntax]

Layout’ta tanımlı birden fazla Button nesnesi olabileceği için hangisine erişmek istiyorsak @InjectView annotation‘ını kullanırken Button’un id özelliğini de veriyoruz.

[box type=”download”] Roboguice kütüphanelerine buradan ulaşabilirsiniz.[/box]

Jar dosyalarını indirdikten sonra libs dizini altına kopyalayabilirsiniz.

Bu adımdan sonra yapacağımız iş Java sınıflarımızı Activity sınıfından değil RoboActivity sınıfından türetmek.

Roboguice framework’ünü kullandığımız zaman sadece layout dosyalarındaki View nesnelerine değil, resources dizinindeki resim dosyalarımıza ya da string.xml dosyasındaki metinlerimize ve sistem servislerine de direk erişebiliriz.

Bunun için sınıfımız içerisinde kullanmamız gereken @Inject annotationları aşağıdaki gibidir.

[codesyntax lang=”java” lines=”no”]

@InjectView(R.id.text)
TextView name;

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

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

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

// System service
@Inject
LocationManager loc;

[/codesyntax]

Kaynak : https://code.google.com/p/roboguice/