看排版更好的原文地址

intent实现普通跳转

使用intent的setclass方法,示例(由此界面跳转到NewActivity界面)

		//使用setOnClickListener方法设置点击事件
Button button=(Button)findViewById(R.id.mainButton);
button.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View p1)
{
Intent intent=new Intent();
intent.setClass(MainActivity.this,NewActivity.class);
//新建一个Intent,使用setClass方法设置跳转的哪个界面
startActivity(intent);
} });

使用Bundle传递数据的跳转

Bundle类

Bundle类用来携带数据,类似于map。里面存放键值对。Bundle类有putXXX()/getXXX()方法,如putInt(),getInt(),putString(),getString().

putXXX()用来往Bundle对象存入数据。

getXXX()用来从Bundle对象取出数据。

其内部使用了HashMap<String,Object>类型的变量存储数据。

示例

如下代码实现将数据从当前Activity传递到另一个Activity:

(当前Activity)

        Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle data=new Bundle();
//创建了一个Bundle对象用来存储在两个Activity之间传递的数据
data.putString("website","cnblogs.com/hjw1");
data.putString("name","环家伟");
data.putInt("age",20);
//添加进Bundle对象里面两个String类型的数据和一个int类型的数据
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
//创建了一个从MainActivity跳转到Main2Activity的Intent
gotoAnother.putExtras(data);
//将存储了数据的Bundle对象put进Intent里面
startActivity(gotoAnother);
//开始跳转
}
});

(目标Activity)

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Bundle receive=getIntent().getExtras();
//得到随Intent传递过来的Bundle对象
String name=receive.getString("name");
String website=receive.getString("website");
int age=receive.getInt("age");
//根据设定的String关键词得到对应的数据。
((TextView)findViewById(R.id.name)).setText("姓名:"+name);
((TextView)findViewById(R.id.age)).setText("年龄:"+age);
((TextView)findViewById(R.id.website)).setText("博客地址:"+website);
//将数据显示到TextView上面
}

结果:

姓名:环家伟
年龄:20
博客地址:cnblogs.com/hjw1

直接使用Intent传递数据

Intent自身也有一系列的putExtra()函数。( 这里与上面的putExtras()函数区分开,这里没有s )

这个函数有很多重载,如putExtra(String name,String value),putExtra(String name,int value)等。

与上面的Bundle类操作方法相似,都是String-value键值对。

接收时,Intent对象有getXXXExtra()一系列函数得到传递过来的数据,如getStringExtra()等。

示例:

(当前Activity)

                Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
//创建了一个从MainActivity跳转到Main2Activity的Intent
gotoAnother.putExtra("name","环家伟");
gotoAnother.putExtra("age",20);
gotoAnother.putExtra("website","cnblogs.com/hjw1");
//将数据put进Intent里面
startActivity(gotoAnother);
//开始跳转

(目标Activity)

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent receiveIntent=getIntent();
//得到Intent
String name=receiveIntent.getStringExtra("name");
int age=receiveIntent.getIntExtra("age",0);
String website=receiveIntent.getStringExtra("website");
((TextView)findViewById(R.id.name)).setText("姓名:"+name);
((TextView)findViewById(R.id.age)).setText("年龄:"+age);
((TextView)findViewById(R.id.website)).setText("博客地址:"+website);
//将数据显示到TextView上面
}

结果:

姓名:环家伟
年龄:20
博客地址:cnblogs.com/hjw1

得到新Activity关闭后的数据

想象一下,你要做一个图像处理的app。你在当前actuvity点击了一个按钮,然后出现图片列表,选择图片后原activity要得到图片。这种情况在Windows里面经常出现,点击按钮打开文件管理器选择文件。

要想得到新Activity关闭后传过来的数据,只要在打开新Activity的跳转时使用startActivityForResult(Intent intent,int requestCode) 函数,而不是以前的startActivity()函数。

这样打开的Activity在关闭后会传回数据。

为了得到传回的数据,需要在前面的Activity里面重写onActivityResult(int requestCode,int resultCode,Intent data)函数。

示例

实现点击按钮得到字符串时,打开新界面,点击按钮关闭新界面后,Toast显示环家伟

而点击按钮得到整数时,Toast内容为20

        Button stringButton=(Button)findViewById(R.id.stringButton);
stringButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(gotoAnother,1);
//第二个参数是请求码,比如此Activity有两个按钮都是启动同一个新Activity
//请求码就是用来区分到底是哪个按钮请求的
}
});
Button intButton=(Button)findViewById(R.id.intButton);
intButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(gotoAnother,2);
//此处请求码是2
}
});

重写onActivityResult方法用来接收传过来的信息

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1)
Toast.makeText(this,"按钮1得到字符串:"+data.getStringExtra("name"),Toast.LENGTH_SHORT).show();
if(requestCode==2)
Toast.makeText(this,"按钮2得到整数:"+data.getIntExtra("age",0),Toast.LENGTH_SHORT).show();
//此处的requestCode就是startActivityForResult里面传递的requestCode
// 可以用来区分是哪个按钮请求的
/*
提示:Toast不要忘记show()
*/
}

新Activity中

        Button closeButton=(Button)findViewById(R.id.close);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();//数据通过Intent返回
intent.putExtra("name","环家伟");
intent.putExtra("age",20);
Main2Activity.this.setResult(RESULT_OK,intent);
//RESULT_OK是一个整数,此参数是结果码,可以用来区分是哪个Activity返回的数据
//(如果原Activity可以打开多个新Activity)
finish();//关闭新Activity
}
});

安卓开发-intent在Activity之间数据传递的更多相关文章

  1. 解析activity之间数据传递方法的详解

    转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下     1  基于消息的通信机制 ...

  2. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  3. Android——不同activity之间数据传递

    /* * 不同activity之间数据的传递 */ public class MainActivity extends Activity { private EditText et_name; @Ov ...

  4. Android activity之间数据传递和共享的方式之Application

    1.基于消息的通信机制  Intent ---bundle ,extra 数据类型有限,比如遇到不可序列化的数据Bitmap,InputStream,或者LinkedList链表等等数据类型就不太好用 ...

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

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

  6. android Activity之间数据传递 Parcelable和Serializable接口的使用

    Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口.0.解 ...

  7. android 不同Activity之间数据传递

    1. 传值Activity package mydemo.mycom.demo2; import android.content.Intent; import android.support.v7.a ...

  8. Activity之间数据传递(一)(简单传递,数据包Bundle,传递对象)

    一,简单传递(简单的字符串) 第一个activity通过putExtra()将字符串传入i protected void onCreate(Bundle savedInstanceState) { s ...

  9. android 应用程序Activity之间数据传递与共享的几种途径

    一.基于消息的通信机制 Intent ---boudle ,extraAndroid为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信!组件间通信的核心机制是I ...

随机推荐

  1. Spark源码剖析(九):TaskScheduler原理与源码剖析

    接着上期内核源码(六)的最后,DAGSchedule会将每个Job划分一系列stage,然后为每个stage创建一批task(数量与partition数量相同),并计算其运行的最佳位置,最后针对这一批 ...

  2. docker with flannel

    ** 原创文章,请勿转载 ** docker的单host,多container环境下,是使用host的docker0网桥进行通信的.如果跨host, container之间要通信怎么办呢?答案是fla ...

  3. ztree使用font-awesome字体的问题,

    ztree要使用自定义图标字体的时候 需要自己做皮肤cssstyle,官方有文档,但是有些时候我们值需要简单的设置图标字体class样式 是没办法使用的,我们需要对两个函数进行修改. 下面是两个函数请 ...

  4. 使用筛选器特性标记方法解决webapi 跨域问题

    在我的之前随笔 解决api.WebService跨域问题 中有人问到可以用特性来解决跨域问题吗,答案是肯定的,可以的:操作如下: 首先建一个类CrossSiteAttribute:从抽象 Action ...

  5. MYSQL:RELPACE用法

    RELPACE类似于INSERT的方法,但如果表中的旧行与主键或惟一索引的新行具有相同的值,则在插入新行之前删除旧行 为了测试方便我们首先要创建一张表 CREATE TABLE test ( id I ...

  6. 如何获取离线安装Chrome扩展程序的包

    最近工作环境限制,有些机器文件只能拿进去,不能拿出来.网络也是内部网络,没法下载东西.工作中常用的一些Chrome扩展应用也没法使用,对于我这类工具爱好者,打击够大.后来想想,既然扩展应用能开发打包上 ...

  7. spring 多线程 写入数据库 和 写入 xml文件

    最近工作中遇到一个需求 多线程先爬取页面 然后将爬取的结果持久化到数据库中 ,一些大文本的内容需要持久化到 xml文件中; 下面是运行后的结果: xml 文件写入结果: 数据库写入结果: 再来张项目结 ...

  8. HDU 2037 今年暑假不AC(贪心,区间更新,板子题)

    今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  9. vijos 1557:bzoj:1413: [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

  10. [51nod1502]苹果曼和纸

    苹果曼有很大的一张纸.这张纸的形状是1×n的长方形.你的任务是帮助苹果曼来折叠这一张纸.有一些操作,这些操作有如下两个种形式: 1. 把这张纸在第pi个位置对折.经过对折后,左边的1×pi部分会盖到右 ...