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);