关于Android中startActivityForResult()方法的详细使用

前提条件,Activity的之间的调用关系:A --> B,即Activity A启动了Activity B      在A中启动B的代码:startActivityForResult(new Intent("ActivityB"), 100)

      此方法与startActivity(Intent intent)方法最重要的区别就是:该方法是带返回值的,所谓返回值其实是:你所启动的那个Activity调用了finish()方法或者是按下了Back键被destory()掉之后,然后就会有一个返回值。如果你要使用该返回值的信息,必须要在你之前的Activity A中Override父类的onActivityResult(int requestCode, int resultCode, Intent data)方法,等到ActivityB销毁后,会自动执行A中的onActivityResult(int requestCode, int resultCode, Intent data)方法,其中的requestCode就是你之前在A中调用B的那个requestCode,即100.而第二个参数resultCode则一般是我们在ActivityB销毁之前,手动设置的一个标志值,即在ActivityB中的设置代码:setResult(200);;finish();即先设置值,然后finish掉B,这样我们就把我们自己设置的resultCode:200也返回给了A。此时在A中的onActivityResult()方法中,就可以同时接收到这两个值了。

      为什么我们要在B中手动设置resultCode呢?因为,假如果有时候我们需要在B中点击了一个按钮(或者是其他操作)之后,我们需要回到A,即我们会调用A的finish方法,但是如果用户是直接按下了Back键将Afinish掉的,此时我们在A中就不知道B究竟是以何种方式finish掉的,所以我们设置了此结果标志位。另外,有些人还需要在B finish掉的同时,给A带回一些数据。例如,假如果现在B是登录界面,而我要实现的是,在B界面中登录成功后,将用户名返回给A。如上,我们就必须要使用setResult()的另外一个重载(Overload)的方法了:setResult(int resultCoe, Intent data),即我们也可以像两个Activity之间传递数据一样,使用Intent对象来传递。即我们可以将我们的数据放到intent中,最后再用setResult(200,data)同时将标志位200和我们自己的用户名数据传递给A。

你可能感兴趣的:(关于Android中startActivityForResult()方法的详细使用)