Ex3.11 对startActivityForResult的理解

    数据的交互是双向的,仅实现数据的收发还远远不够。如上例(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实现参数回传,关键在于文中提到的三个函数。弄清楚这三个函数,数据回传就不算事儿了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值