您的位置:首页 > 其它

Intent的简单介绍

2016-05-21 17:38 357 查看
Intent是Android启动指定组件的意图,Intent分为显式意图和隠式意图,显式意图就是指定具体跳转的那个应用,用于应用中的activity的跳转,隠式意图用于规定action的特定组件。对于同一个项目中的跳转不使用隠式意图,隠式意图是在你手机所有安装的程序的动作中找对应的意图,是比较耗时的

方法

显式的意图设置

Intent intent=new Intent(this,TwoActivity.class);

startActivity(intent);

//setClass(Context packageContext,Class<?>cls);设置该Intent将要启动的组件

Intent intent=new Intent();

intent.setClass(this, TwoActivity.class);

startActivity(intent);

setClassName(Context packageContext,StringclassName);//设置Intent将要启动的组件对应的类名

setClassName(String packageName,String className);//设置Intent将要启动的组件对应的类名

Component属性

Intent的Component属性需要ComponentName对象来指定开启的组件。

ComponentName的构造方法有

ComponentName(Stringpkg,String cls);//创建pkg所在包下的cls类所对应的组件。

ComponentName(context pkg,String cls);//创建pkg所对应的包下的cls类所对应的组件。
ComponentName(Context pkg,Class<?>cls);//创建pkg所对应的包下的cls类所对应的组件。

Intent intent=new Intent();
intent.setComponent(new ComponentName(this, TwoActivity.class));
startActivity(intent);

实例二

ResolveInfoinfo = this.info.get(i); 

 //该应用的包名 

String pkg =info.activityInfo.packageName; 

//应用的主activity类 

String cls =info.activityInfo.name; 

ComponentName componet = newComponentName(pkg, cls); 

Intent intent = new Intent(); 

intent.setComponent(componet); 

startActivity(intent);

 

 

隠式意图设置

在隐式意图中每个Intent只能指定一个Action,但可以指定多个Category,可以通过addCategory()添加,程序创建Intent时,默认启动Category属性值是Intent.CATEGORY_DEFAULT(常量值:android.intent.category.DEGAULT);,此时对应的Intent_filter应该包含Category属性为android.intent.category.DEGAULT()。

Intent_filter中可以规定多个Action,多个Caytegory,则指定该Intent_filter的组件可以被多个动作启动,但需要满足的要求要大于、等于Intent所指定的要求,才能启动组件。

 

 

 

Intent intent=new Intent();

intent.setAction("com.start.activity");//规定隠式意图

//intent.setAction(“com.start”);//一个Intent只有一个动作

intent.addCategory("com.category");//可以添加多个category

startActivity(intent);//启动的是动作是com.start.activity,caegory是<categoryandroid:name="android.intent.category.DEFAULT" />和<categoryandroid:name="com.category">的activity

activity的注册

<activity

           android:name=".TwoActivity"

           android:label="@string/app_name"

            >

           <intent-filter>

                <actionandroid:name="com.start.activity"/>//过滤的多个动作

                <actionandroid:name="com.start"/>//过滤的多个动作

                <categoryandroid:name="android.intent.category.DEFAULT" />

                <categoryandroid:name="com.category"></category>

            </intent-filter>

       </activity>

根据隠式意图调用系统的Activity则是根据系统的动作进行跳转

 

Intent的extra属性

Intent的extra属性是用于intent的数据传递,intent可以通过putExtra()进行传递数据的设置,是以key—value的形式传递的,可以传递基本数据类型、bundle类型、String类型、实现了序列化的对象。

Intent的flag属性

Flage是intent额外的控制旗标,可通过addFlages()进行添加

FLAG_ACTIVITY_BROUGHT_TO_FRONT:在栈中只有ActivityA,从A通过该flag启动B,后B在启动c和D,后D在启动B,则会将B移动到前台,而对A、C、D不会有影响现在栈中是A、C、D、B,即只会把栈中的该Activity移动到顶端,显示到前台

FLAG_ACTIVITY_CLEAR_TOP:该flag加载的Activity跳转的Activity若在栈中其上有Activity会移除上面的而将跳转的Activity置顶,相当于SingleTask

FLAG_ACTIVITY_NEW_TASK:默认的启动的旗标,控制重新创建一个新的Activity。

FLAG_ACTIVITY_NO_ANIMATION:控制启动该activity时不适用过渡动画

FLAG_ACTIVITY_NO_HISTORY:控制启动的activity不会保留在activity栈中

FLAG_ACTIVITY_REORDER_TO_FRONT:若activity存在则会直接将其带到前台

FLAG_ACTIVITY_SINGLE_TOP:相当于singleTop,只要activity子栈顶就不会重新创建实例

Intent还有data和type属性,使用较少,就不多做解释了

//意图传值中的传递对象集合

Intent intentHC = new Intent(.this,ListActivity.class);

intentHC.putExtra("pdbillList", (Serializable)pdBillhead.getXtShelfArticles());//pdBillhead.getXtShelfArticles()获取的是一个list集合,lis集合中的对象实现了Serializable

startActivity(intentHC);

//接收端

pdbillList = (List<对象实体类>) getIntent().getSerializableExtra("pdbillList");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息