Android学习之Activity之间的数据传递
Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下。 (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思路:1.通过Intent进行数据的传递,Intent作为数据的载体。
2.首先将要传递的数据放入到Intent当中。这里用到了Intent中的putExtra()方法,这个方法有一系列的重载。
3.启动另一个Activity后将数据从Intent中取出来。这里用到了getStringExtra()方法,这个方法同样有一系列的重载。 MainActivity中的核心代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
findViewById(R.id.SwitchSecondAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data1 = "Data Transfer";
Intent intent1 = new Intent(MainActivity.this , SecondActivity.class);
//put data in the Intent
intent1.putExtra("AimData" , data1);
startActivity(intent1);
}
});
}
}
putExtra()方法里面是一个键值对参数,第一个参数是键(“AimData”),用于后面SecondActivity中从Intent中取值,第二个参数是真正要传递的数据(data1)。 SecondActivity中的核心代码:
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
//get data from Intent
Intent intent2 = getIntent();
String data2 = intent2.getStringExtra("AimData");
TextView show = (TextView)findViewById(R.id.show);
show.setText(data2);
}
}
首先用getIntent()方法获取用于启动SecondActivity的Intent,然后调用getStringExtra()方法,传入相应的键(“AimData”),就可以得到相应的数据了。 点击按钮转到SecondActivity可以看到传入的数据如截图:以上是传递单一数据,如果传递不止一种数据那该怎么办呢?这时我们可以使用Bundle传递数据包。 MainActivity中的核心代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
findViewById(R.id.SwitchSecondAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent(MainActivity.this , SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name" , "KY2");
bundle.putInt("age" , 21);
intent1.putExtras(bundle);
startActivity(intent1);
}
});
}
}
首先新建一个Bundle对象,之后再传递数据,最后将整个bundle放入intent当中。
SecondActivity中的核心代码:
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
//get data from Intent
Intent intent2 = getIntent();
Bundle data2 = intent2.getExtras();
TextView show = (TextView)findViewById(R.id.show);
show.setText(String.format("name = %s , age = %d" , data2.getString("name") , data2.getInt("age")));
}
}
首先通过Bundle data2 = intent2.getExtras();获取bundle。 结果截图:(二).返回数据给上一个Activity 思路:1.通过Intent进行数据的传递,Intent作为数据的载体。
2.首先将要传递的数据放入到Intent当中。这里用到了Intent中的putExtra()方法。
3.启动另一个Activity后将数据从Intent中取出来。这里用到了getStringExtra()方法。
SecondActivity中的核心代码:
public class SecondActivity extends Activity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
editText = (EditText)findViewById(R.id.write);
findViewById(R.id.BackToMainAty).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent();
intent1.putExtra("AimData", editText.getText().toString());
setResult(RESULT_OK, intent1);
//finish the SecondActivity
finish();
}
});
}
}
首先需要定义一个返回按钮,之后需要一个输入文本框。构建一个Intent用于传递数据,将数据放入Intent中。向上一个Activity返回数据,则需要setResult()方法。此方法接收两个参数,第一个参数用于向上一个Activity返回处理结果,一般只使用RESULT_OK或者RESULT_CANCELED这两个值,第二个参数则是承载数据的Intent。最后用finish()方法销毁当前活动即SecondActivity。 MainActivity中的核心代码:
public class MainActivity extends Activity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.display);
findViewById(R.id.Switch).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this , SecondActivity.class);
startActivityForResult(intent , 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
textView.setText("SecondActivity返回的数据是:" + data.getStringExtra("AimData"));
}
}
想要接收所启动的Activity传回的数据的话,那么这里就不能用startActivity()了,要用startActivityForResult()。此方法接受了两个参数,第一个参数即用于启动Activity的Intent,第二个参数是请求码requestCode,我们可以通过请求码确定此次请求的意义是什么,请求码是唯一的就可以了,这里传入了0。之后再重写onActivityResult()方法用于呈现SecondActivity传递过来的数据。这里的Intent data就是SecondActivity中携带数据的Intent。
关于onActivityResult()方法:第一个参数是requestCode即启动活动时传入的请求码,第二个参数是resultCode即返回数据时传入的处理结果,第三个参数是data即携带着返回数据的Intent。一个活动可以启动很多个活动,这时接收这些活动的返回的数据都会回调到onActivityResult()方法当中,这时我们需要通过requestCode判断数据来源,确定是哪个Activity返回的之后再通过resultCode来判断处理结果是否成功,最后从data中取值。
结果截图:
点击按钮启动SecondActivity
输入数据点击按钮返回MainActivity
版权声明:博主原创,转载请注明出处。
Android学习之Activity之间的数据传递的更多相关文章
- Activity之间的数据传递-android学习之旅(四十七)
activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...
- activity之间的数据传递方法
1 基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...
- Activity之间的数据传递
最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...
- Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)
Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...
- Android学习总结——Activity之间传递参数
核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象 软件环境:Android Studio 一.在 ...
- Android 数据传递(一) Activity之间的数据传递
bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...
- Android中Activity之间的数据传递
在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...
- Android笔记(四) Activity之间的数据传递
我们之前使用Intent进行Activity之间的跳转,其实Intent还可以在启动活动的时候传递数据. Intent提供了一系列的putExtra方法以便我们把想要传递的数据暂存在Intent中,待 ...
- Android Activity之间的数据传递
1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...
随机推荐
- Mac下安装 php+nginx+mysql 开发环境
一.mysql安装 mysql是安装最简单顺利的 1. 首先去官方网站下载Mac适用的MySQL的dmg包 下载页面 选择图中最下方的dmg包下载进行安装 安装完成后 MySQL的安装目录为/usr/ ...
- python 微信推送模板消息
#!/usr/bin/env python #-*- coding: utf-8 -*- import httplib import json import MySQLdb #从数据库中获取acces ...
- ARM 汇编器对C的扩展
__swi void ledtest(); //:声明 edtest 是个软中断. __asm 内嵌汇编 //:通常在C程序里面需要嵌入汇编代码,这是就可以用__asm关键字 ...
- 关于取url或者微信中参数的js
今天遇到这么个情况,因为是第一次弄,所以在这里做了个记录,因为要弄过二维码的功能,要获取里面的参数并传给后台,所以要对二维码里面的地址进行过滤.刚开始是很惆怅的,因为之前没弄过,原以为可以通过spli ...
- eclipse安装lombok插件
1:下载jar https://projectlombok.org/download.html 2:双击下载的lombok.jar 安装 3:如果eclipse没有安装到默认目录,需要手动选择ecli ...
- swift字典集合-备
Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成 ...
- asp.net 管道模型+生命处理周期
http://www.cnblogs.com/qianlifeng/archive/2010/12/16/1908568.html https://msdn.microsoft.com/zh-cn/l ...
- C(m,n)%P
program1 n!%P(P为质数) 我们发现n! mod P的计算过程是以P为周期的的,举例如下: n = 10, P = 3 n! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 ...
- cf492C Vanya and Exams
C. Vanya and Exams time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- 2014.6.14模拟赛【bzoj1592】[Usaco2008 Feb]Making the Grade 路面修整
Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了 ...

以上是传递单一数据,如果传递不止一种数据那该怎么办呢?这时我们可以使用Bundle传递数据包。
MainActivity中的核心代码:
(二).返回数据给上一个Activity
思路:1.通过Intent进行数据的传递,Intent作为数据的载体。


