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开发 ...
随机推荐
- mongodb常用查询
mongo sql 说明 db.users.find() select * from users 从user表中查询所有数据 db.users.find({“username” : “joe”, “a ...
- Scrollbar中滚动条的设置
insideOverlay 默认值,表示在padding区域内并且覆盖在view上 insideInset 表示在padding区域内并且插入在view后面 outsideOverlay 表示在p ...
- Logstash使用jdbc_input同步Mysql数据时遇到的空时间SQLException问题
今天在使用Logstash的jdbc_input插件同步Mysql数据时,本来应该能搜索出10条数据,结果在Elasticsearch中只看到了4条,终端中只给出了如下信息 [2017-08-25T1 ...
- linux rename命令批量修改文件名
修改文件名可以用mv命令来实现 mv filename1 filename2 1 但如果批量修改还是使用rename命令更为方便 现在我们有a b c d 四个文件 增加后缀 rename 's/$/ ...
- 未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
"/"应用程序中的服务器错误. 未能加载文件或程序集"Newtonsoft.Json"或它的某一个依赖项.找到的程序集清单定义与程序集引用不匹配. (异常来自 ...
- Ubuntu sh命令无法正确执行 (修改默认sh为bash)
新安装的ubuntu,执行shell命令,都怀疑自己的shell水平了. 原来, ubuntu默认的是dash, 需要手动执行命令将dash改为bash. 命令: sudo dpkg-reconfig ...
- 升级Https前的可行性验证(一)
升级Https之前的可行性验证 注意:自签证书和Nginx的安装都基于ContOS 6 一.如何申请OpenSSL自签证书 1.安装OpenSSL (一)OpenSSL 工具下载 下载地址 (二)Op ...
- iOS开发-Certificates、Identifiers和Profiles详解
如果是才进入公司进行开发的iOS程序猿来说人难免会对苹果的证书.配置文件,尤其有的需要重头开始的公司来说,最简单的来说真机调试是免不了和这些东西打交道的,有的时候赶时间做完了可能心里也犯嘀咕,本文根据 ...
- centos下配置sftp且限制用户访问目录
SFTP在Linux下是一个很方便很安全的文件传输工具,我常常用它在Linux服务器上替代传统的ftp来传输文件.众所周知SFTP账号是基于SSH账号的,默认情况下访问服务器的权限很大,下面的教程就是 ...
- Android -- 系统和自定义Notification
Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径. 作为UI部分,Notifica ...