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)学习的更多相关文章

  1. android第一行代码-3.activity之间的调用跟数据传递

    前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...

  2. 多个Activity之间的切换与数据交互

    总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...

  3. 完成的设备扫描项目的几个关键程序,包括activity之间的转换

    module 的 gradle.build最后三行的compile 是关键dependencies { implementation fileTree(dir: 'libs', include: [' ...

  4. Android学习之Activity之间的数据传递

    Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...

  5. 建立、配置和使用Activity——使用Bundle在Activity之间交换数据

    当一个Activity启动另一个Activity时,常常会有一些数据需要传过去——这就像Web应用从一个Servlet跳到另一个Serlvet时,Web应用习惯把需要交换的数据放入requestSco ...

  6. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  7. Android笔记(二十) Activity中的跳转和值传递

    我们知道,一个APP是由若干个Activity组成的,那么各个Acitivity中肯定需要进行跳转以及传递数值以保证App的运行,现总结一下多个Activity之间的跳转和值传递. 显式Intent跳 ...

  8. 转-Activity之间数据传递之Intent数据传递

    Intent意图 可用于Activity之间的数据传递,一般可分为下面两种情况,从当前Activity传递到目标Activity后有无返回值: 1.传递后无返回值的情况: 1 2 3 4 5 6 7 ...

  9. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

随机推荐

  1. Dijkstra求最短路径

    单源点的最短路径问题:给定带权有向图G和源点V,求从V到G中其余各顶点的最短路径 Dijkstra算法描述如下: (1)用带权的邻接矩阵arcs表示有向图,arcs[i][j]表示弧<vi,vj ...

  2. Tarjian算法求强联通分量

    如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.强连通图有向图的极大强连通子图,称为强连通分量(strong ...

  3. AC日记——产生数 codevs 1009 (弗洛伊德)(组合数学)

    1009 产生数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descriptio ...

  4. 如何避免测试人员提交重复的Bug

    我们在软件测试过程中,由于不同人员测试同一个项目,所以往往会出现Bug重复提交情况,导致对整个项目和人员产生影响: 浪费测试人员时间和精力,从而影响测试进度 浪费开发人员重复看Bug时间 若开发人员由 ...

  5. Sublime Text2 安装Package Control

    Sublime Text2是一款轻量级的妖娆的编辑器,想要更多私人定制功能的第一步就是安装Package  Control 这是官网的安装方法: Click the Preferences >  ...

  6. usb驱动开发6之端点描述符

    学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...

  7. 给vps设置ssh供爬墙使用

    在服务器上建一个 username : 添加用户:useradd -s /bin/false username,将用户的shell设置成/bin/false.这样用户就无法与系统进行交互. 设置密码: ...

  8. 1017. A除以B (20)

    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...

  9. python数字图像处理(6):图像的批量处理

    有些时候,我们不仅要对一张图片进行处理,可能还会对一批图片处理.这时候,我们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理. 图片集合函数为: skimage.io.ImageCollec ...

  10. IOS开发之—— ShareSDK的使用

    官方下载ShareSDK iOS:http://sharesdk.cn/ ShareSDK社会化分享 包含“社会化分享组件”“社会化登录组件”“第三方评论和赞”三大模块,并有详尽的数据统计后台,助力移 ...