总结系列--系统标准Activity的Action应用

来源:互联网 发布:淘宝火锅底料好吃 编辑:程序博客网 时间:2024/05/23 05:06
       6.2   系统标准ActivityAction应用
       在Android系统中,应用程序一般都有多个Activity,Intent可以实现不同Activity之间的切换和数据 传递。 
       启动Activity方式有以下两种方式。
            显式启动,必须在Intent中指明启动的Activity所在的类。
            隐式启动,Android系统根据Intent的动作和数据来决定启动哪一个Activity,即在隐式启动时, Intent中只包含需要执行的动作和所包含的数据,而无须指明具体启动哪一个Activity,选择权由Android系统和最终用户来决定。

       1.显式启动
      使用Intent 显式启动Activity,首先需要创建一个Intent,指定当前的应用程序上下文及要启动的 Activity,并把创建好的Intent作为参数传递给startActivity()方法。代码如代码清单6-1所示。
      
       2.隐式启动
       隐式启动Activity时,Android系统在应用程序运行时解析Intent,并根据一定的规则对Intent和Activity 进行匹配,使Intent上的动作、数据与Activity完全吻合。而匹配的Activity可以是应用程序本身的,也可以是Android系统内置的,还可以是第三方应用程序提供的。因此,这种方式更强调了Android应用程序中组件的可复用性。 
       由此可以看出,隐式启动不需要指明需要启动哪一个Activity,而由Android系统来决定,有利于使用 第三方组件。
       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
       startActivity(intent); 

      在上述代码中,Intent的动作是Intent.ACTION_VIEW,是根据Uri的数据类型来匹配动作;数据部分 的Uri是Web地址,使用Uri.parse(urlString)方法,可以简单地把一个字符串解释成Uri对象。
      Intent的语法
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString));
      Intent构造函数的第1个参数是Intent需要执行的动作;第2个参数是Uri,表示需要传递的数据。
      Android系统支持的常见动作字符串常量表

      
       6.2.2   获取Activity返回值
       在6.2.1节的IntentDemo示例中,通过使用startActivity(Intent)方法启动Activity后,两个Activity 之间相互独立,没有任何关联。然而,在很多情况下,后启动的Activity是为了让用户对特定信息进行选择,在关闭这个Activity后,用户的选择信息需要返回给未关闭的那个Activity。由此,按照Activity启动的先后顺序,先启动的称为父Activity,后启动的称为子Activity,如果需要将子Activity的部分信息返回给父Activity,则可以使用Sub-Activity的方式去启动子Activity。
       获取子Activity的返回值,一般分以下3个步骤。
       1. 以Sub-Activity的方式启动子Activity 
       首先,调用startActivityForResult(Intent, requestCode)函数,其中,参数Intent用于决定启动哪个Activity, 参数requestCode是唯一的标识子Activity的请求码。
       
       2.设置子Activity的返回值
       在子Activity调用finish()函数关闭前,调用setResult()函数将所需的数据返回给父Activity。其中, setResult()函数有两个参数:结果码和返回值。结果码表明了子Activity的返回状态,通常为Activity.RESULT_OK或Activity.RESULT_CANCELED,或自定义的结果码,结果码均为整数类型;返回值封装在Intent中,子Activity通过Intent将需要返回的数据传递给父Activity。数据主要是Uri形式,可以附加一些额外信息,这些额外信息用Extra的集合表示
     
       3.在父Activity中获取返回值
       当子Activity关闭时,启动它的父Activity的onActivityResult()函数将被调用;如果需要在父Activity 中处理子Activity的返回值,则覆盖此函数即可。      
       此函数的语法如代码清单6-14所示。 
       在上述代码中,第1个参数requestCode,用来表示是哪一个子Activity的返回值;第2个参数resultCode 用于表示子Activity的返回状态;第3个参数data是子Activity的返回数据,返回数据类型是Intent。返回数据的用途不同,Uri数据的协议也就不同。也可以使用Extra方法返回一些原始类型的数据。  
 
       在上述代码中,第1行代码和第2行代码是两个子Activity的请求码;第7行代码对请求码进行匹配; 第9行和第11行代码对结果码进行判断,如果返回的结果码是Activity.RESULT_OK,则在代码的第10行使用getData()函数获取Intent 中的Uri数据;反之,若返回的结果码Activity.RESULT_CANCELED, 则不进行任何操作。


0 0