Android RoboGuice 使用指南(17):Inject Extra

jerry Android 2015年08月24日 收藏

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

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

本例使用两个Activity,InjectExtraDemo 用来触发InjectExtraReceiver,在InjectExtraDemo中创建Intent时,通过putExtra 放置两个参数Extra1,Extra2.

  1. public class InjectExtraDemo extends RoboActivity {
  2.  
  3. @InjectView (R.id.button) Button button;
  4. @Inject Context context;
  5.  
  6.  
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.injectextra);
  11. button.setOnClickListener(mGoListener);
  12. }
  13.  
  14. private OnClickListener mGoListener = new OnClickListener()
  15. {
  16. public void onClick(View v)
  17. {
  18. Intent di = new Intent();
  19. di.setClass(context, InjectExtraReceiver.class) ;
  20. di.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
  21. | Intent.FLAG_ACTIVITY_SINGLE_TOP);
  22. di.putExtra("Extra1","Message1");
  23. di.putExtra("Extra2","Message2");
  24. context.startActivity(di);
  25. }
  26. };
  27.  
  28. }

在InjectExtraReceiver 通过@InjectExtra 标记 ,Roboguice自动为这些变量注入由Intent传入的值,Optional=true表示该Extra为可选,如果传入的Intent不含这个Extra时,值为null.

  1. public class InjectExtraReceiver extends RoboActivity{
  2.  
  3. @InjectView (R.id.textview) TextView textView;
  4. @InjectExtra ("Extra1" ) String extra1;
  5. @InjectExtra ("Extra2" ) String extra2;
  6. @InjectExtra (value="Extra3" , optional=true) String extra3;
  7.  
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11.  
  12. setContentView(R.layout.injectextrareceiver);
  13.  
  14. textView.setText("Extra1:"+extra1
  15. +"\r\nExtra2:"+extra2
  16. +"\r\nExtra3:"+extra3);
  17.  
  18. }
  19.  
  20. }