Android学习笔记三:用Intent串联activity
转载请注明原文地址: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的更多相关文章
- Android(java)学习笔记73:Intent启动Activity
1. Intent启动Activity案例 (1)首先是main.xml和other.xml文件如下: main.xml文件: <?xml version="1.0" enc ...
- android学习笔记三--Activity 布局
1.线性布局 标签 :<LinearLayout></LinearLayout> 方向:android:orientation, 垂直:vertical 水平:Horizont ...
- Android学习笔记——Intents 和 Intent Filters(二)
本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3993488.html 知识点 ...
- Android学习笔记_46_Android的intent之间Object、List、List<Object>和全局变量数据的传递(Parcelable Serializable)
转http://blog.csdn.net/pku_android/article/details/7456305 一.传递List<String>和List<Integer> ...
- Android学习笔记_16_添加多个Activity、参数传递、请求码和结果码使用
一.添加新的Activity步骤: 第一步:新建一个继承Activity的类,如:NewActivity public class NewActivity extends Activity { @Ov ...
- android学习笔记三
GUI==>Graphics User Interface,图形用户界面. android UI 建立在View.ViewGroup基础上,采用组合器设计模式设计View和ViewGoup. V ...
- Android学习笔记(三)
ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...
- android学习笔记二:Intent
1.Intent作用 协助完成各个组建间的通信.如activity间.启动service.Broadcast. 2.Intent构成 1.Componet name:要启动的目的组建. 2.Actio ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
随机推荐
- 波吉亚家族第一季/全集The Borgias 1迅雷下载
波吉亚家族 第一季 The Borgias Season 1 (2011)本季看点:<波吉亚家族>是一个非常复杂的故事,是现代人描绘这个臭名昭著的王朝家族过往历史的一副有趣又坦率的肖像画. ...
- 管理Mysql常用指令
知识会更新,数据库系统也一样,本文只保证对Mysql 5.7以及MariaDB 10有效. 编码篇 展示当前默认的编码和字符集 SHOW VARIABLES LIKE 'char%'; 修改服务器默认 ...
- 解决appcompat中各种奇葩的错误
一.依赖/脱离appcompat 在新版本中Google跟新了一个依赖包,这个包包含了v4和v7的东西(v7是要依赖v4这个包的,所以用到v7时必须用一起的v4),只要你的编译版本compile wi ...
- 防止Memcached的DDOS攻击另外一个思路
3月3日,国家互联网应急中心通报了一条消息 关于利用memcached服务器实施反射DDoS攻击的情况通报 通告了 memcached 服务器漏洞被黑客利用的情况,笔者的一台服务器也存在漏洞,因此将漏 ...
- 深入理解多线程(三)—— Java的对象头
上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型.这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头.主要介绍一下对象头的作用,结构以及他和锁的关系. Java对象模型回顾 ...
- 使用pm2管理node.js应用
中文文档:https://pm2.io/doc/zh/runtime/quick-start/ pm2是从nodejs衍生出来的服务器进程管理工具,可以做到开机就启动nodejs.当然了,有些运维同学 ...
- Ubuntu sh命令无法正确执行 (修改默认sh为bash)
新安装的ubuntu,执行shell命令,都怀疑自己的shell水平了. 原来, ubuntu默认的是dash, 需要手动执行命令将dash改为bash. 命令: sudo dpkg-reconfig ...
- 2018.08.28 ali 梯度下降法实现最小二乘
- 要理解梯度下降和牛顿迭代法的区别 #include<stdio.h> // 1. 线性多维函数原型是 y = f(x1,x2,x3) = a * x1 + b * x2 + c * x ...
- 使用Java语言开发微信公众平台(八)——自定义菜单功能
随着上一篇文章的结束,我们已经实现了所有消息的类型的回复功能.今天,我们来学习更加高大上,也更加重要的自定义菜单功能. 一.了解自定义菜单 自定义菜单是微信公众平台最常用也是最重要的功能之一.根据微信 ...
- php7安装mongoDB扩展
本文我们使用pecl命令来安装 首先来到php7的安装目录 $ /usr/local/php7/bin/pecl install mongodb 回车,执行成功后,会输出以下结果: …… Build ...