Ex3.11 对startActivityForResult的理解

来源:互联网 发布:mac开机密码怎么设置 编辑:程序博客网 时间:2024/05/22 15:34

    数据的交互是双向的,仅实现数据的收发还远远不够。如上例(Ex3.10)所示,通过startActivity启动界面会产生一个新的Intent实例,因而所有数据也全部被初始化。

   上一章通过Bundle实现了数据的收发,接下来我们通过startActivityForResult()方法来实现数据的回传。

 

   第一、实现回传的准备工作——如何启动Activity?

   据现在的知识结构来看,启动Activity只能用startActivity()或者startActivityForResult()。我们来看一下这两个接口是如何描述的:

 

void android.app.Activity.startActivity(Intent intent)

void android.app.Activity.startActivityForResult(Intent intent, int requestCode)

   参数intent我们不去细说,(如果不懂,看前一章)主要就在于requestCode的不同。官方的解释为:

   requestCode : If >= 0, this code will be returned in onActivityResult() when the activity exits

 

   我是这样理解的,requestCode的存在,就是为了区分不同模块所传回的数据。因为现实应用中,主界面需要众多子功能模块配合(子Activity)配合,要靠requestCode来辨别是哪个子模块。

 

    接下来我们看看实例中所给出的代码,是如何调用另一Activity的。

 

 

    第二、执行数据回传

    在子Activity中完成相应计算后,就可以用setResut()准备要回传的数据了。当调用finish()方法后,就把intent封装的数据发到主Activity中。

    而回传数据的关键就在于setResut()方法:

    void android.app.Activity.setResult(int resultCode, Intent data)

void android.app.Activity.setResult(int resultCode, Intent data)

     resultCode用来区分不同的返回结果与返回状态(RESULT_CANCELED/RESULT_OK)

     PS:到现在我始终质疑resultCode的存在价值,如果仅仅为了判断返回状态和返回结果,完全可以用Intent封装一个标志位吗!可能我这的观点很武断,望大家指正。

 

 

    第三、接收数据

    按照数据回传规则,主Activity(调用过startActivityForResult) 只要重载onActivityResult()方法就可以实现接收回传的数据了。

void android.app.Activity.onActivityResult(int requestCode, int resultCode, Intent data)

    各个参数的意义与上面对应,就不用再解释了。我们看看Ex3.11中的数据回传都做了些什么,哪些参数用到了?哪些没用到?

 


 

 

总结:

      使用Intent实现参数回传,关键在于文中提到的三个函数。弄清楚这三个函数,数据回传就不算事儿了。

 

原创粉丝点击