扣丁学堂笔记第09天Intent

1.概述和Component属性

扣丁学堂笔记第09天Intent_第1张图片

直接查找组件来跳转界面:创建一个ComponentName对象的实例,再把实例作为参数传入intent的setComponent()方法里,它的实现与常用的Intent intent = new Intent(this,SecondActivity.class)其实是一样的


2.Action属性

Activity中Intent Filter的匹配过程

(纠正:余下的Intent Filter数量是否不为0)

扣丁学堂笔记第09天Intent_第2张图片

调用intent的setAction方法添加自定义的Action(字符串形式),然后在清单文件中的相应Activity添加<intent filter><action android:name="~~~"></intent filter>,还应在Activity中加入category标签,其他组件在清单文件中不用加category

如果有两个Activity都含有符合要求的action,那么会弹出供用户选择的界面

在intent filter中还可以设置优先级android:priority="",除非有一个设置为负数,否则均为正数,设置无效;

在代码中setAction只能执行一次,但对应的activity在清单文件中却可以有多个action属性,而且只需满足一个action就可跳转到该界面;


3.Category与Data属性

addCategory()可以添加多个类别


data(Uri)属性,一般配合action一起使用(最常用的组合方式)

注意:在new Intent()是没有参数的。

MainActivity

public void sendDataClick(View v){
    	Intent intent = new Intent();//哎,我又踩坑了!傻到在这里传入Activity2.class,
//    	结果action和data不就白设置了?我死去的时间啊!!!
    	intent.setAction(Intent.ACTION_VIEW);
    	Uri data = Uri.parse("http://www.baidu.com");
    	intent.setData(data);
    	startActivity(intent);
    }

清单文件
<activity android:name=".Activity2"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <data android:scheme="http" android:host="www.baidu.com"></data>
            </intent-filter>
        </activity>



4.Type属性

type属性:用来表示数据类型,要同时设置data和type属性,要用setDataAndType()方法

扣丁学堂笔记第09天Intent_第3张图片


5.Standard、SingleTop、SingleTask、SingleInstance启动模式

扣丁学堂笔记第09天Intent_第4张图片

Activity的四种启动模式:

在启动文件对应的activity中添加android:launchMode="~~~"

standard:默认的模式,每次启动会新建一个Activity对象,在栈中“后进先出,先进后出”

singleTop:在当前任务栈中判断栈顶是否为当前Activity,如果是就直接使用,如果不是,再创建一个放在栈顶;

singleTask:在当前任务栈中判断栈里是否存在Activity,如果不存在就创建一个新的Activity入栈,如果存在,会把之上的所有Activity清除出栈,显示所需的Activity;

singleInstance:新创建一个任务栈放入新创建的Activity,该任务栈只允许存在一个Activity实例(同类的Activity会多次创建),如果已存在,会切换到该任务栈



6.Flags属性与小结

在代码中设置Activity的启动模式,可以调用intent的setFlags()方法

INTENT.FLAG_ACTIVITY_NEW_TASK:在新的任务栈中启动Activity(用得较多)

INTENT.FLAG_ACTIVITY_CLEAR_TASK:相当于singleTask
INTENT.FLAG_ACTIVITY_CLEAR_TOP:相当于singleTop




7.Intent应用示例

扣丁学堂笔记第09天Intent_第5张图片扣丁学堂笔记第09天Intent_第6张图片扣丁学堂笔记第09天Intent_第7张图片

你可能感兴趣的:(扣丁学堂笔记第09天Intent)