Android RoboGuice使用指南(14):Inject View

在例子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

摘自 引路蜂移動軟件
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。