Activity-Intent的模糊跳转(3)

来源:互联网 发布:华客数据恢复论坛 编辑:程序博客网 时间:2024/06/08 09:28

Intent有如下属性,除了Extras,Flags其大部分属性是用来模糊跳转的.

1.Component name         2.Action

3.Data                  4.Category

5.Extras                6.Flags

以下分析他们是如何跳转.

1.Component name 最直接的查询跳转方式,此时AndroidManifest.xml所在的<activity />不需要任何配置

当系统启动该intent的时候,会在该文件中查找相关组件的name属性,发现匹配则打开!

Intent intent=new Intent();//通过setComponent或者setClass达到直接启动另一个ac的目的intent.setComponent(new ComponentName(MainActivity.this,AnotherActivity.class));//intent.setClass(MainActivity.this,AnotherActivity.class);


2.Action 通过动作类型进行匹配.当系统启动该intent的时候,会在该文件中查找相关组件的<action>标签,

发现匹配则加入列表,AndroidManifest.xml中可能有相同的<action />标签,这时候用户根据需要可以选择打开.

Intent intent=new Intent();//通过setAction模糊查找具有相同<action />标签的acintent.setAction(Intent.ACTION_VIEW);

同时,我们对AndroidManifest.xml文件需要配置<action />的组件添加标签,必须赋加一个

<category android:name="android.intent.category.DEFAULT" />标签.否则无效

一个<intent-filter />可以有多个<action />子标签,如下

<activity android:name="com.example.testactivity.AnotherActivity" android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.GO" />                <action android:name="android.intent.action.COME" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter></activity>

3.Data 通过setData设置一个Uri,或者通过setType设置一个mimeType.系统查找方式同上.代码如下:

Intent intent=new Intent();//通过setType或者setData查找具有相同mimeType的acintent.setType("text/javascript");//intent.setData(Uri.parse("http://www.baidu.com"));//intent.setDataAndType(data, type);

<activity            android:name="com.example.testactivity.AnotherActivity"            android:label="@string/app_name" >            <intent-filter>                <data android:mimeType="text/javascript"/>                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </activity>

5.Extras ,两个Activity之间的跳转当然避免不了传值.Intent对象接受各种基本类型的值.

对于特殊的类型,比如自定义的Obj对象,必须在定义的时候继承Parcelable接口.该接口的作用是

把一个定义的obj对象变为可从Parcel写入或者存储.

public class MyParcelable implements Parcelable {     private int mData;     public int describeContents() {         return 0;     }     public void writeToParcel(Parcel out, int flags) {         out.writeInt(mData);     }     public static final Parcelable.Creator<MyParcelable> CREATOR             = new Parcelable.Creator<MyParcelable>() {         public MyParcelable createFromParcel(Parcel in) {             return new MyParcelable(in);         }         public MyParcelable[] newArray(int size) {             return new MyParcelable[size];         }     };          private MyParcelable(Parcel in) {         mData = in.readInt();     } }








0 0
原创粉丝点击