看排版更好的原文地址

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. value toDF is not a member of org.apache.spark.rdd.RDD

    idea显示toDF() 没有这个函数,显示错误: Error:(82, 8) value toDF is not a member of org.apache.spark.rdd.RDD[com.d ...

  2. MicroPython之TPYBoard v102开发板控制OLED显示中文

    转载请以链接形式注明文章来源,公众号:MicroPython玩家汇 0x00前言 之前看到一篇文章是关于TPYBoardv102控制OLED屏显示的,看到之后就想尝试一下使用OLED屏来显示中文.最近 ...

  3. python3之序列化(pickle&json&shelve)

    1.pickle模块 python持久化的存储数据: python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python ...

  4. BIOS 品牌快捷键

    主板品牌 启动按键 笔记本品牌 启动按键 台式机品牌 启动按键 华硕主板 F8 联想笔记本 F12 联想台式机 F12 技嘉主板 F12 宏基笔记本 F12 惠普台式机 F12 微星主板 F11 华硕 ...

  5. 升级node与npm

    升级node 原文地址:https://lierabbit.cn/articles/3 一.安装 n 工具,这个工具的名称很短,方便输入 npm install -g n 二.升级node至长期版或者 ...

  6. mybatis动态sql排序无效

    order by 字段,在用动态sql时会出现问题,排序无效,而且在日志里查询不到,不能发现这个错误. 通常,咱们的动态sql一般都会用#代替$,因为#可以防止sql注入问题. 但是在order by ...

  7. Android 线程_笔记

    多线程 一.为什么要使用多线程 1.提高用户体验或避免ANR 在事件处理代码中需要使用多线程,响应时间超过5s,即会出现ANR(Application is not responding),并因为响应 ...

  8. java_web学习(十一) 层的概念与应用

    一个项目通常分为三层: 所谓三层是表述层(WEB层).业务逻辑层(Business Logic),以及数据访问层(Data Access). ·WEB层:包含JSP和Servlet等与WEB相关的内容 ...

  9. (亲测)躺着破解IDM下载权限,治疗不用破解补丁的强迫症们

    首先.如果触犯了某些规则权限,请原谅. 很早以前就做过这个的破解,挺实用的,我今天就把之前写的经验贴出来大家一起学习学习~~~ 今天利用这个方法破解了最新版,最终的效果如下所示:我不是来刷存在感的.只 ...

  10. Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】

    校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...