转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513399.html

一:Intent

Intent可以理解为 意图。

我们可以通过创建intent实例来定义一个跳转意图,意图包括:要跳转到哪个页面、需要传递什么数据。

然后通过startActivity(intent)来启动跳转。

有两种方式定义Intent:显式Intent、隐式Intent。

二:显式Intent

1)我们可以在actvity的java文件中,通过代码显示定义Intent,参数为:从哪个页面,跳转到哪个页面。

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

2) 我们还可以通过putExtra(key,value)的方法,往intent传入数据,携带到跳转到目标页。

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra(name, data);
startActivity(intent);

在跳转目标页到java文件中,通过getIntent()提取链接到该activyty的intent实例,然后通过intent实例.getXXExtra(name)提取数据,XX是数据类型。

3)我们也可以在跳转发起页获取到跳转目标页回传到数据

跳转发起页:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);//第一个参数是intent,第二个是请求码 //重写结果回传函数,监听结果码以及回传的intent
//第一个参数:请求码:用于校验是否该页面发起的跳转请求的回传结果
//第二个参数:结果码:回传的结果码类型
//第三个参数:Intent实例:跳转目标页通过一个intent来携带数据,返回发起页。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {//根据请求码来匹配是哪个跳转请求的回传结果
case 1:
if(resultCode == RESULT_OK) {//根据结果码,执行不同结果码对应的操作
String name = "return_data";
String returnData = data.getStringExtra(name);//通过回传的intent提取数据
......//使用数据:赋值给变量、调用其他函数、赋值给视图控件等
}
break;
default:
}
}

跳转目标页:

Intent intent1 = new Intent();//创建回传的intent实例
intent1.putExtra(name, data);//携带数据
setResult(RESULT_OK, intent1);//作为结果进行回传

三:隐式Intent

上面我们是通过代码来创建Intent实例,这样做的优点是比较灵活,随创随用;缺点也很明显,对于一些通用性的跳转类型,需要不断创建相同的intent。

为此,android提供了隐式Intent。

隐式Intent可以理解为配置式的Intent:在Manifest文件中注册activity时,通过<activity>标签下配置<intent-filter>的内容,指定当前活动能够响应的action和category。由系统自己去分析这个某一个Intent实例,然后在manifest.xml配置好的众多activity中帮我们找出最合适的Activity去启动

action表示普通的、被执行的行动,如ACTION_VIEW,ACTION_EDIT,ACTION_MAIN等。

【action值不是android内置的,而是由自己命名的独一无二的字符串,使用 android:name 特性来指定对响应的动作名时,通常使用基于 Java 包的命名方式:包路径.intent.大写的action名】

   如果Intent请求的Action和<intent-filter>中个某一条<action>匹配,那么该Intent就通过了这条<intent-filter>的动作测试。如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况:
(1) 如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配;
(2) 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺
利地通过<intent-filter>的行为测试。

category表示类别,为acttion行动提供额外的信息,用于在action匹配的基础上进行更加精准的定位。

  只有当Intent请求中所有的Category与组件中某一个IntentFilter的<category>完全匹配时,才会让该 Intent请求通过测试,IntentFilter中多余的<category>声明并不会导致匹配失败。一个没有指定任何类别测试的 IntentFilter仅仅只会匹配没有设置类别的Intent请求。   
使用 android:category 属性用来指定在什么样的环境下动作才被响应。每个 Intent Filter 标签可以包含多个 category 标签。你可以指定自定义的种类或使用 Android 提供的标准值,如下所示:

❑ ALTERNATIVE
ALTERNATIVE 种类指定,在某种数据类型的项目上可以替代默认执行的动作。例如,一个联系人的默认动作时浏览它,替代的可能是去编辑或删除它。 ❑ SELECTED_ALTERNATIVE
与 ALTERNATIVE 类似,但 ALTERNATIVE 总是使用下面所述的 Intent 解析来指向单一的动作。SELECTED_ALTERNATIVE在需要一个可能性列表时使用。 ❑ BROWSABLE
指定在浏览器中的动作。当 Intent 在浏览器中被引发,都会被指定成 BROWSABLE 种类。 ❑ DEFAULT
设置这个种类来让组件成为 Intent Filter 中定义的 data 的默认动作。这对使用显式 Intent 启动的 Activity 来说也是必要的。 ❑ GADGET
通过设置 GADGET 种类,你可以指定这个 Activity 可以嵌入到其他的 Activity 来允许。 ❑ HOME
HOME Activity 是设备启动(登陆屏幕)时显示的第一个 Activity 。通过指定 Intent Filter 为 HOME 种类而不指定动作的话,你正在将其设为本地 home 画面的替代。 ❑ LAUNCHER
使用这个种类来让一个 Activity 作为应用程序的启动项。

data表示数据类型、格式,指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、 authority和path。

  在代码中创建Intent时,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。
❑ android:host
指定一个有效的主机名(例如, com.google )。 ❑ android:mimetype
允许你设定组件能处理的数据类型。 ❑ android:path
有效地 URI 路径值(例如, /transport/boats/ )。 ❑ android:port
特定主机上的有效端口。 ❑ android:scheme
需要一个特殊的图示(例如, content 或 http )。

上面是关于在manifest中如何定义隐式Intent,那么在代码中怎么使用呢?

我们在跳转发起页的java代码中,创建一个intent实例,然后为它指定action、catagory、data等,然后使用该intent来进行启动跳转。由android自身通过action、catagory、data等属性在manifest中寻找匹配的actvity来进行启动。

Intent intent = new Intent("com.example.jared.activitystudy.ACTION_START");//使用action值作为参数创建intent
intent.addCategory("com.example.jared.activitystudy.MY_CATEGORY");//为其添加catagory值
intent.setData(Uri.parse(""));//为其设置数据,用于携带。【数据的类型需匹配隐式intent中定义好的格式】
startActivity(intent);//启动

Android学习笔记三:用Intent串联activity的更多相关文章

  1. Android(java)学习笔记73:Intent启动Activity

    1. Intent启动Activity案例 (1)首先是main.xml和other.xml文件如下: main.xml文件: <?xml version="1.0" enc ...

  2. android学习笔记三--Activity 布局

    1.线性布局 标签 :<LinearLayout></LinearLayout> 方向:android:orientation, 垂直:vertical 水平:Horizont ...

  3. Android学习笔记——Intents 和 Intent Filters(二)

    本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3993488.html 知识点 ...

  4. Android学习笔记_46_Android的intent之间Object、List、List<Object>和全局变量数据的传递(Parcelable Serializable)

    转http://blog.csdn.net/pku_android/article/details/7456305 一.传递List<String>和List<Integer> ...

  5. Android学习笔记_16_添加多个Activity、参数传递、请求码和结果码使用

    一.添加新的Activity步骤: 第一步:新建一个继承Activity的类,如:NewActivity public class NewActivity extends Activity { @Ov ...

  6. android学习笔记三

    GUI==>Graphics User Interface,图形用户界面. android UI 建立在View.ViewGroup基础上,采用组合器设计模式设计View和ViewGoup. V ...

  7. Android学习笔记(三)

    ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...

  8. android学习笔记二:Intent

    1.Intent作用 协助完成各个组建间的通信.如activity间.启动service.Broadcast. 2.Intent构成 1.Componet name:要启动的目的组建. 2.Actio ...

  9. 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期

    在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...

随机推荐

  1. SQLite中的事务操作

    关于SQLite事务可以解决一些问题,比如你要插入两个数据,可以将两个数据作为同一个事务进行插入,这样如果第二个数据错误了,便自动执行回滚操作,第一个数据也不会插入成功,保证了数据的同步! 一.实际的 ...

  2. MongoDB 分布式部署教程

    本文将介绍如何使用 MongoDB 提供的 Replica Set 和 Shards 功能构建一个分布式 MongoDB 集群. Replica Set 部署 我们先从部署一个三节点的 Replica ...

  3. [转]Win7与虚拟机VMware下运行的Ubuntu共享文件夹

    From : http://blog.csdn.net/gaojinshan/article/details/9231853 安装VMware Tools,在VMware面板上选择“虚拟机-重新安装V ...

  4. cannot be resolved. It is indirectly referenced from required .class files

    缺少引用. 把缺少的引用在导入一下...如果是mavan 在当前moudle里也要把 dependency加进来

  5. QT 5.12 安装MinGW 7.3.0 32bit

    一.下载MinGW 7.3.0 32bit for QT 5.12 链接:https://pan.baidu.com/s/1IKDhvxEbKIgmWyQQhpdnTw提取码:ubxc 二.解压缩并将 ...

  6. android adb源码分析(1)

    ADB是Android debug bridge的缩写,它使用PC机可以通过USB或网络与android设备通讯. adb的源码位于system/core/adb目录下,先来看下编译脚本Android ...

  7. libcurl进行HTTP GET获取JSON数据(转载)

    转载:http://blog.csdn.net/vincent2610/article/details/68488365 #include <stdio.h> #include <i ...

  8. solr高亮设置以及摘要

    高亮显示 public SolrDocumentList query(String str) { SolrQuery query = new SolrQuery(str); //设置高亮,以下两种方式 ...

  9. oracle的行级触发器使用

    行级触发器: 当触发器被触发时,要使用被插入.更新或删除的记录中的列值,有时要使用操作前.后列的值. :NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值 例1: 建立一个触发器 ...

  10. 【算法】Java-Redis-Hash算法对比-参考资料

    Java-Redis-Hash算法对比-参考资料 redis java map 红黑树_百度搜索 java使用redis缓存(String,bean,list,map) - CSDN博客 redis ...