在例子Android RoboGuice 使用指南(2):第一個例子Hello World /kf/201205/130091.html介紹瞭使用Roboguice開發的基本步驟:
創建一個RoboApplication 的子類GuiceApplication,GuiceApplication為Appliacation的子類,修改AndroidManifest.xml,將Application 的name 指向這個類。
將原先由Activity派生的類基類改為RoboActivity(或其它相關Activity).
如果有需要的話在AbstractAndroidModule 中重載configuatation方法定義bindings.
如果不使用Roboguice,如果Activity中需要訪問定義在Layout中的某個View,一般需要使用findViewById 來查找對應的View,並將它強制轉換為對應的類,如果需要訪問的View很多,重復的代碼就非常繁瑣。
如果使用Roboguice 的Inject View ,代碼就簡潔易讀多瞭,@Inject View的基本用法如下:
@InjectView (R.id.xxx) ViewType viewInstance;
R.id.xxx 為所需View定義在Layout中的id ,如R.id.textview1
ViewType 為所需View的類型,如TextView
viewInstance 為變量名。
我們定義一個injectview.xml ,如下:
<?xml version=”1.0″ encoding=”utf-8″?>
< LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<TextView
android:id=”@+id/textview1″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/injectview”
/>
<TextView
android:id=”@+id/textview2″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/injectview”
/>
<TextView
android:id=”@+id/textview3″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/injectview”
/>
<TextView
android:id=”@+id/textview4″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/injectview”
/>
<Button android:id=”@+id/button”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center_vertical”
android:text=”@string/clickmebutton”/>
</LinearLayout>
定義瞭4個TextView和一個Button,看看如何使用InjectView來訪問這些View:
[java] public class InjectViewDemo extends RoboActivity {
@InjectView (R.id.button) Button goButton;
@InjectView (R.id.textview1) TextView textView1;
@InjectView (R.id.textview2) TextView textView2;
@InjectView (R.id.textview3) TextView textView3;
@InjectView (R.id.textview4) TextView textView4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.injectview);
goButton.setOnClickListener(mGoListener);
}
private OnClickListener mGoListener = new OnClickListener()
{
public void onClick(View v)
{
textView1.setText("Clicked");
textView2.setText("Clicked");
textView3.setText("Clicked");
textView4.setText("Clicked");
}
};
}
public class InjectViewDemo extends RoboActivity {
@InjectView (R.id.button) Button goButton;
@InjectView (R.id.textview1) TextView textView1;
@InjectView (R.id.textview2) TextView textView2;
@InjectView (R.id.textview3) TextView textView3;
@InjectView (R.id.textview4) TextView textView4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.injectview);
goButton.setOnClickListener(mGoListener);
}
private OnClickListener mGoListener = new OnClickListener()
{
public void onClick(View v)
{
textView1.setText("Clicked");
textView2.setText("Clicked");
textView3.setText("Clicked");
textView4.setText("Clicked");
}
};
}
無需使用findViewById 來為每個變量(如textview1)賦值,隻需使用@InjectView標記,賦值的工作都由Roboguice 來完成,程序隻需向Roboguice說“給我某個View”,Roboguice就通過Dependency Injection傳給應用程序所需View的實例對象。代碼比不使用Roboguice時簡潔多瞭。
本例下載:http://up.aiwalls.com/2012/0507/20120507105756490.zip
摘自 引路蜂移動軟件