Intent跳转与传值总结

/*----------------------------------------
 *-描述--Intent跳转与传值总结.
 *-描述--S1.Intent描述
 * Intent的分类
 * 1.显式意图  通常是指intent启动目标组件时明确指定了组件的名称的情况
 *     一般是用在启动同一个应用程序中的组件
 * 2.隐式意图  通常是指intent启动目标组件时没有明确指定了组件的名称的情况
 *    只是指定了启动组件的特征,一般情况下是用在启动不同应用中的组件
 *
 * 如果目标组件没有指定intent-filter意图过滤器只能通过显式启动
 * 如果指定了intent-filter意图过滤器既可以通过显式启动也可以通过action categroy的隐式启动
 *
 * 隐式启动的规律总结:
 * 1.action标签必须存在
 * 2.intent-filter意图过滤器中可以存在多个action category data标签,只要intent对象中能与属性
 *    对应列表中的某一个标签匹配即可启动
 * 3.一般情况隐式启动时通过action和category标签作为启动标示即可
 *-描述--S2.添加显示或隐式意图
 * >>添加显示意图
 *  SS1.新建的类继承-android.app.Activity;
 *  SS2.在清单文件AndroidManifest.xml中注册创建的Activity;
 *  SS3.添加新的Activity视图;
 *  SS4.java代码调用新建的Activity,Context.startActivity(意图对象)
 * >>添加隐式意图
 *  SS1.新建的类继承-android.app.Activity;
 *  SS2.在清单文件AndroidManifest.xml中注册创建的多个隐式意图;
 *      intent-filter action配置相同
 *      隐式意图调用,可以选择多个页面(相同的action)
 *  S3.java代码调用新建的Activity,Context.startActivity("")
 *-描述--S3.Intent传值相关描述
 * >>Intent存入传递的值
 *  intent.putExtra(key,value) key是String类型的键,值可以是基本数据类型(数组)、系列化的对象等
 *  intent.putExtras(key,value) value可以是Intent或Bundle
 *      Bundle可以传递基本数据类型(数组)、String、实现Parcelable/Serializable接口的对象、IBinder和
 *      另一个Bundle等
 * >>获取传递过来Intent中的值
 *  getIntent()
 *  intent.getXXXExtra()
 *-描述--S4.Activity值的回传
 * >>A页面=>B页面
 *  startActivityForResult(intent, REQUEST_CODE) 启动活动(intent,请求码)   //A页面
 *      根据请求码判断是否是对应程序段发出的请求
 *  setResult(Activity.RESULT_OK, intent) 返回结果 //B页面
 *      RESULT_OK结果码,data-要返回的数据
 *  onActivityResult(int requestCode, int resultCode, Intent data)  //A页面
 *      B结束后调用的A方法,requestCode-A发出的请求码,resultCode-B设置的结果码,data-B回传的数据
 *-描述--S5.通过Application传值
 *  TestApplication extends Application
 *  testApplication (TestApplication) getApplication(); //A页面
 *  testApplication.getXXX //B页面
 *-描述--B1.None.
 *---------------------------------------------------------------------------*/
        <!-- 隐式意图测试活动1 -->
        <activity android:name=".basic.dir.basic2.ModxBasic2Activity">
            <!-- 意图过滤器 intent-filter标签中可以action  category data标签
                    action标签不能为空,action为空,隐式的意图将阻塞所有的activity
                    只要intent对象中的action内容与意图过滤器中的某一项内容能够匹配就可以了 -->
            <!-- 只要是采用隐式意图启动activity那么android系统会给activity设置默认的分类
                    所以必须添加默认的category设置 -->
            <!-- <data/>意图过滤器的data标签中指定的属性都会在意图对象中尽享匹配 如果意图过滤器中定义的属性
                    intent对象中未定义或者不能匹配则不能启动 -->
            <intent-filter>
                <action android:name="com.example.text.start" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <!-- 隐式意图测试活动2 -->
        <activity android:name=".basic.dir.basic3.ModxBasic3Activity">
            <intent-filter>
                <action android:name="com.example.text.start" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

 其他描述

/**
 * Intent意图对象
 * 1.激活组件 启动组件Activity、Service、广播
 * 2.传递少量的数据
 * 3.根据action标记动作启动系统界面  例如:启动系统发送短信的界面
 *
 * Intent的中的属性
 * 1. Component name  组件名  类类型  组件名表示包名.类名
 *   设置组件名 setComponent() setClass()  setClassName()
 *   获取 getComponent()
 * 2.Action  字符串类型对组件特征描述
 *   1.系统提供的action常量
 *   2.自定义action setAction() 设置action  getAction()获取action
 * 3.Data 数据 一般与action结合到一起用 表示action动作执行的数据资源
 *   URI(统一资源标示符)  Data就是uri类型的数据  uri类型中包括数据资源以及数据类型 MIME
 *   scheme://host:port/path
 *   setData()  setType() setDataAndType() 设置data
 *   getData() getType() 获取方法
 * 4.Category 分类 字符串对activity进行分类
 *   addCategory()  设置 removeCategory() 移除
 *   getCategories() 获取分类字符串列表
 * 5.Extras 额外信息  主要在intent激活组件时进行数据的传递
 * 6.flags  标记 int类型
 *   用来标记回退栈中的activity 以及提供的常量可以设置activity的启动模式
 *   setFlags() 设置标记
 *   getFlags() 获取标记
 */
//Intent跳转
//①.第一种方式:开启另一个Activity
//Intent intent=new Intent(this,SecondActivity.class);
//Intent intent=new Intent();
//②.第二种方式:使用ComponentName
//使用ComponentName组件名来开启另一个Activity
//ComponentName component=new ComponentName(this, SecondActivity.class);
//第二个参数是包含包名,类名的一个完整字符串
//ComponentName component=new ComponentName(this, "com.SecondActivity");
//①.单纯的包名;②.包含包名,类名的一个完整字符串
//ComponentName component=new ComponentName("com.intent", "com.SecondActivity");
//intent.setComponent(component);
//③.第三种方式:setClass也可以实现跳转
//intent.setClass(this, SecondActivity.class);
//④.第四种方式:setClassName跳转方式
//intent.setClassName(this, "com.SecondActivity");
//⑤.第五种:通过隐式意图开启另一个Activity
//intent.setAction("implicit.action");
//其实系统默认就有这句话,默认省略了这句话
//intent.addCategory("android.intent.category.DEFAULT");
//startActivity(intent);

 

posted @ 2016-08-07 17:12  zhen-Android  阅读(590)  评论(0编辑  收藏  举报