使用 Intent 啟動一個 Activity,Service 等時,可以通過 putExtra 傳送數(shù)據(jù),被觸發(fā)的 Activity,Service 可以使用 getIntent() 的 getExtras 取的 Extra 的 Bundle ,然后再根據(jù) Extra 的鍵值 (Key) 取的對應(yīng)的參數(shù)值。
RoboGuice 提供了一個簡潔的方法來取得 這些 Extra 值,通過 @InjectExtra 標記。
本例使用兩個 Activity,InjectExtraDemo 用來觸發(fā)InjectExtraReceiver,在 InjectExtraDemo 中創(chuàng)建 Intent 時,通過 putExtra 放置兩個參數(shù) Extra1,Extra2.
public class InjectExtraDemo extends RoboActivity {
@InjectView (R.id.button) Button button;
@Inject Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.injectextra);
button.setOnClickListener(mGoListener);
}
private OnClickListener mGoListener = new OnClickListener()
{
public void onClick(View v)
{
Intent di = new Intent();
di.setClass(context, InjectExtraReceiver.class) ;
di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
di.putExtra("Extra1","Message1");
di.putExtra("Extra2","Message2");
context.startActivity(di);
}
};
}
在 InjectExtraReceiver 通過 @InjectExtra 標記 ,Roboguice 自動為這些變量注入由 Intent 傳入的值,Optional=true 表示該 Extra 為可選,如果傳入的 Intent 不含這個 Extra 時,值為 null.
public class InjectExtraReceiver extends RoboActivity{
@InjectView (R.id.textview) TextView textView;
@InjectExtra ("Extra1" ) String extra1;
@InjectExtra ("Extra2" ) String extra2;
@InjectExtra (value="Extra3" , optional=true) String extra3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.injectextrareceiver);
textView.setText("Extra1:"+extra1
+"\r\nExtra2:"+extra2
+"\r\nExtra3:"+extra3);
}
}
http://wiki.jikexueyuan.com/project/android-roboguice/images/18.png" alt="" />