在《Android Studio中Intent的用法1》中提到,Intent(意图)可以用来产生新的Activity。在使用Intent来产生新的Activity时,可以使用两种方法:显式Intent和隐式Intent。显式Intent方式指定了要产生的Activity;而隐式Intent方式则没有指定要产生的Activity,由安卓系统根据指定的信息决定产生哪个Acitivty。
1 显式Intent方式
可以使用两种方式实现显式Intent,一种是通过Intent的构造方法实现,另一种是通过Intent的方法实现。
1.1 通过Intent的构造方法实现
1.1.1 构造方法介绍
Intent类的构造方法有一种类型是
public Intent(Context packageContext, Class<?> cls)
其中,第一个参数是Context类的对象,表示使用该Intent的类的应用包上下文;第二个参数表示用于Intent的组件类。Intent类的这种构造方法,就是为指定的组件类cls创建了一个Intent。
相关链接1 Context类:也就是上下文类。“上下文”可以看成是当前对象在程序中所处的环境,一个用户与系统交互的过程。用户和操作系统的每一次交互都是一个场景,例如打电话、发短信,这些都是一个场景。把这种场景就抽象为Context类。
相关链接2 Class<?>:Class<T>表示T对应的类,而Class<?>表示类型不确定的类。
1.1.2 代码实现
使用Intent的构造方法实现显示Intent的代码如图1所示。
![]()
图1 构造方法实现显式Intent
其中,使用了“1.1.1 构造方法介绍”中提到的构造方法创建了Intent类的对象,并通过startActivity()创建了指定了Activity,即Main2Activity类对应的活动。
1.2 通过Intent类的方法实现
可以通过Intent类的setComponent()方法或者setClass()/setClassName()方法实现显式Intent。
1.2.1 通过setComponent()方法实现
setComponent()方法的作用是指定组件来处理Intent。该方法的格式如下所示。
public Intent setComponent(ComponentName component)
其中,参数component是ComponentName类的对象,表示指定的用来处理Intent的组件,如果该参数是null,则表示由系统指定一个组件。
通过setComponent()方法实现显式Intent的代码如图2所示。

图2 setComponent()方法实现显式Intent
其中,图2①定义了ComponentName类的对象cn,该类的构造方法的两个参数,与“1.1.1 构造方法介绍”中介绍的两个参数含义相同;图2②通过setComponent()方法设置了处理intent的组件,最后调用startActivity()方法产生Main2Activity活动。
1.2.2 setClass()/setClassName()方法实现
setClass()/setClassName()的作用是设置类。其中setClass()方法的格式为
public Intent setClass(Context packageContext,Class<?> cls)
该方法的参数与“1.1.1 构造方法介绍”中介绍的两个参数含义相同。使用setClass()方法实现显式Intent的代码如图3所示。

图3 setClass()方法实现显式Intent
setClassName()方法的格式为
public Intent setClassName(String packageName,String className)
其中,第一个参数是String类型,表示使用该Intent的类的包名字;第二个参数表示产生的活动对应的类名字。使用setClassName()方法实现显式Intent的代码如图4所示。
![]()
图4 setClassName()方法实现显式Intent
其中,图4①中的getPackageName()方法的作用是获取当前类的包名;“com.example.myapplication.Main2Activity”是活动Main2Activity的绝对路径,“com.example.myapplication”是Main2Activity所在的包名,如图5所示。

图5 Main2Activity所在的包
需要注意的是,setClassName()方法的第二个参数必须使用Main2Activity的绝对路径,而不能只使用类名“Main2Activity”。

686

被折叠的 条评论
为什么被折叠?



