37.Activity之间的转换以及数据的传递(Intent)学习
Intent简介:
在一个Android应用中,主要由四种组件组成(四种组件分别为:Activity、Broadcast、Service、ContentProvider),而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
Intent来实现Activity之间的跳转:
1.无数据的简单跳转
通常在button的setOnClickListener中,通过构造一个新的intent实例,然后通过startActivity(Intent实例)来实现:
open.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(MainActivity. this , FileBrowser. class ); startActivity(intent); } }); |
为什么需要指定两个活动呢?因为在Android中有一个活动栈,这样的构造方式才能确保正确的将前一个活动压入栈中,才能在触发返回键的时候活动能够正确出栈。
2.所有Activity都必须在AndroidManifest.xml中声明:
<activity android:name= "SecondActivity" ></activity> |
3.Intent常用的构造函数:
A.Intent(String action) 指定action类型的构造函数
B.Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider
C.Intent(Context packageContext, Class<?> cls) 传入组件的构造函数(示例一中提到的Activity之间的转换)
D.Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体
Intent(String action, Uri uri) 的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。
1
2
|
Intent intent = new Intent(Intent.ACTION_EDIT, null); startActivity(intent); |
该示例所使用的是构造函数B,Intent.ACTION_EDIT表示的是一个Action,执行此代码的时候,程序就会在AndroidManifest.xml中寻找相应的URI下所属的Activity;
<action android:name="android.intent.action.EDIT" />对应的Activity,如果对应为多个activity具有<action android:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity,如下图:
如果是用示例代码一那种方式进行发送则不会有这种情况。
Activity之间数据的传递:
首先需要使用到的是Bundle
String path = file.getAbsolutePath(); String name = file.getName(); Intent intent = new Intent(FileBrowser. this ,MainActivity. class ); Bundle bundle= new Bundle(); bundle.putString( "path" ,path ); bundle.putString( "name" , name); intent.putExtras(bundle); startActivity(intent); |
首先,示例中创建了一个Intent的实例,用于转换Activity,同时,从该Activity中的变量获取了需要传递的数据;
其次是bundle.putXXX()方法的调用,向bundle中填充数据
void | putInt(String key, int value)
Inserts an int value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putIntArray(String key, int[] value)
Inserts an int array value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putLong(String key, long value)
Inserts a long value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putBoolean(String key, boolean value)
Inserts a Boolean value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putBooleanArray(String key, boolean[] value)
Inserts a boolean array value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putAll(Bundle map)
Inserts all mappings from the given Bundle into this Bundle.
|
void | putString(String key, String value)
Inserts a String value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putStringArray(String key, String[] value)
Inserts a String array value into the mapping of this Bundle, replacing any existing value for the given key.
|
void | putStringArrayList(String key, ArrayList<String> value)
Inserts an ArrayList value into the mapping of this Bundle, replacing any existing value for the given key.
|
然后调用intent.putExtras(bundle),将bundle绑定在intent上,最后startActivity();
数据的接收:
1
2
3
4
5
6
7
|
Bundle bd = intent.getExtras(); String str_path = bd.getString( "path" ); String str_name = bd.getString( "name" ); text = (TextView)findViewById(R.id.tv_address); name = (TextView)findViewById(R.id.tv_name); text.setText(str_path); name.setText(str_name); |
转载: http://www.cnblogs.com/VortexPiggy/archive/2012/05/25/2509465.html
37.Activity之间的转换以及数据的传递(Intent)学习的更多相关文章
- android第一行代码-3.activity之间的调用跟数据传递
前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...
- 多个Activity之间的切换与数据交互
总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...
- 完成的设备扫描项目的几个关键程序,包括activity之间的转换
module 的 gradle.build最后三行的compile 是关键dependencies { implementation fileTree(dir: 'libs', include: [' ...
- Android学习之Activity之间的数据传递
Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...
- 建立、配置和使用Activity——使用Bundle在Activity之间交换数据
当一个Activity启动另一个Activity时,常常会有一些数据需要传过去——这就像Web应用从一个Servlet跳到另一个Serlvet时,Web应用习惯把需要交换的数据放入requestSco ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- Android笔记(二十) Activity中的跳转和值传递
我们知道,一个APP是由若干个Activity组成的,那么各个Acitivity中肯定需要进行跳转以及传递数值以保证App的运行,现总结一下多个Activity之间的跳转和值传递. 显式Intent跳 ...
- 转-Activity之间数据传递之Intent数据传递
Intent意图 可用于Activity之间的数据传递,一般可分为下面两种情况,从当前Activity传递到目标Activity后有无返回值: 1.传递后无返回值的情况: 1 2 3 4 5 6 7 ...
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
随机推荐
- Dijkstra求最短路径
单源点的最短路径问题:给定带权有向图G和源点V,求从V到G中其余各顶点的最短路径 Dijkstra算法描述如下: (1)用带权的邻接矩阵arcs表示有向图,arcs[i][j]表示弧<vi,vj ...
- Tarjian算法求强联通分量
如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.强连通图有向图的极大强连通子图,称为强连通分量(strong ...
- AC日记——产生数 codevs 1009 (弗洛伊德)(组合数学)
1009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descriptio ...
- 如何避免测试人员提交重复的Bug
我们在软件测试过程中,由于不同人员测试同一个项目,所以往往会出现Bug重复提交情况,导致对整个项目和人员产生影响: 浪费测试人员时间和精力,从而影响测试进度 浪费开发人员重复看Bug时间 若开发人员由 ...
- Sublime Text2 安装Package Control
Sublime Text2是一款轻量级的妖娆的编辑器,想要更多私人定制功能的第一步就是安装Package Control 这是官网的安装方法: Click the Preferences > ...
- usb驱动开发6之端点描述符
学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...
- 给vps设置ssh供爬墙使用
在服务器上建一个 username : 添加用户:useradd -s /bin/false username,将用户的shell设置成/bin/false.这样用户就无法与系统进行交互. 设置密码: ...
- 1017. A除以B (20)
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...
- python数字图像处理(6):图像的批量处理
有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理.这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理. 图片集合函数为: skimage.io.ImageCollec ...
- IOS开发之—— ShareSDK的使用
官方下载ShareSDK iOS:http://sharesdk.cn/ ShareSDK社会化分享 包含“社会化分享组件”“社会化登录组件”“第三方评论和赞”三大模块,并有详尽的数据统计后台,助力移 ...