startActivity与startActivityForResult的使用小结
1、在一个Activity中想要启动进入另一个Activity时,通常我们使用startActivity这个方法来实现,代码如下:
其中MainActivity为源activity,ActivityLifeCycleActivity为目标activity,也就是要进入的那个,也可通过intent传递一些必要的参数。
Intent intent = new Intent(MainActivity.this, ActivityLifeCycleActivity.class); startActivity(intent);
2、当进入第二个activity后,想要在关闭activity时传递一些参数给它的上一级activity,即可使用startActivityForResult这个方法来实现,代码如下:
方法中的intent和startActivity的intent没有区别,需要传递一个requestCode, 即1这个值为本次请求的标识,在第二个activity返回后用的到
Intent intent = new Intent(MainActivity.this, ActivityForResultActivity.class); startActivityForResult(intent, 1);
在ActivityForResultActivity中返回数据,通过setResult方法实现,第一个参数为resultCode,告诉第一个activity返回的标识是RESULT_OK, 第二个参数通过intent传递数据;调用finish关闭当前activity,返回数据,即执行ActivityForResultActivity.this.finish() 完成activity的关闭
public class ActivityForResultActivity extends ActionBarActivity { private Button mBtnReturnMain; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_activity_for_result);
mBtnReturnMain = (Button) findViewById(R.id.btn_return_main); mBtnReturnMain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("result", "我是来自ForResult的Activity的消息"); setResult(RESULT_OK, intent); ActivityForResultActivity.this.finish(); } }); } }
在源activity也就是MainActivity中实现方法onActivityResult,判断resultCode的值和上面setResult的第一个参数进行对应,分支requestCode与startActivityForResult的第二个参数对应,这样可以通过参数值在做多个分支的跳转与数据接收
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK){ switch (requestCode){ case 1: String str = data.getStringExtra("result"); if(TextUtils.isEmpty(str)){ str = "ForResultActivity没有返回消息"; } Toast.makeText(MainActivity.this,str, Toast.LENGTH_SHORT).show(); break; default: break; } } }
以上就是对startActivity和startActivityForResult的一点总结