离线下载
PDF版 ePub版

引路蜂 · 更新于 2018-11-28 11:00:43

Inject Extra

使用 Intent 启动一个 Activity,Service 等时,可以通过 putExtra 传送数据,被触发的 Activity,Service 可以使用 getIntent() 的 getExtras 取的 Extra 的 Bundle ,然后再根据 Extra 的键值 (Key) 取的对应的参数值。

RoboGuice 提供了一个简洁的方法来取得 这些 Extra 值,通过 @InjectExtra 标记。

本例使用两个 Activity,InjectExtraDemo 用来触发InjectExtraReceiver,在 InjectExtraDemo 中创建 Intent 时,通过 putExtra 放置两个参数 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);

 }

}

上一篇: Standard Injecti... 下一篇: Inject Resources