使用Intent 啟動一個Activity,Service等時,可以通過putExtra 傳送數據,被觸發的Activity,Service可以使用getIntent()的getExtras 取的Extra的Bundle ,然後再根據Extra的鍵值(Key)取的對應的參數值。
RoboGuice提供瞭一個簡潔的方法來取得 這些Extra 值,通過@InjectExtra 標記。
本例使用兩個Activity,InjectExtraDemo 用來觸發InjectExtraReceiver,在InjectExtraDemo中創建Intent時,通過putExtra 放置兩個參數Extra1,Extra2.
[java] 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);
}
};
}
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.
[java] 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://up.aiwalls.com/2012/0507/20120507110758371.zip
摘自 引路蜂移動軟件