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( ...
随机推荐
- JobDeer 的《程序员必读的职业规划书》
JobDeer 的<程序员必读的职业规划书> 关键字 持续性,人生规划,职业规划 概念 职业规划三部分: 职业定位 目标设定 通道设计 职业价值论: 能为公司做什么 同样的能力再不同公司价 ...
- nginx 配置以及常用命令
windows下安装以及配置nginx http://jingyan.baidu.com/article/f3e34a12a9c1c3f5eb6535d4.html 1)下载地址: http://ng ...
- 在iis中调试asp.net程序
第一步,在iis中新建一个网站,名称为Langben,“物理路径”选择你的程序的根目录,端口你可以随便设置一个数,我这里设置为8888(后面要用到哦). 第二步,应用程序池设置一下 第三步,接下来,在 ...
- rsync相关整理
第一部分 rsync服务端配置 1.下载安装 a. yum安装. yum install rsync b. 下载rsync安装文件安装 #tar zxvf rsync-2.6.9 ...
- 关于python27 中文编码
本博文已移致独立博客:www.pubwin2009.net 传送门:http://www.pubwin2009.net/index.php/pubwin/42.html 看了网上好多的资料,以前一直不 ...
- 关于linux定时操作cron的理解
cron是服务名称,crond是后台进程(有的后台也叫作cron,本人是ubuntu12.04,32bit),crontab则是定制好的计划任务表. 软件包安装: 要使用cron服务,先要安装vixi ...
- Gradle Android客户端程序打包(基于gradle 1.12版本验证通过)
一.前言 android客户端开发进入尾声,负责SEO同事突然发给我一个涉及45个发布渠道的噩耗,之前只发布自有渠道的工作方式(手动修改参数打包)已经不满足需求,所以引入最近比较流行的gradle打包 ...
- 关于DDMS查看Data文件夹
真机是无法查看的,只有通过模拟器查看
- 目测ZIP的压缩率
对word文件,能压到25% 对PDF文件,却只有90% 对压缩文件本身再压缩,几乎没有效果. 考虑到用户一般情况下只有正常的文档,取中位值66%是比较正常的情况,特别是在预估原文件大小的时候.
- 【Xamarin-IOS 开发环境搭建】
MAC 比较贵,虚拟机的干活..... 配置完虚拟机.进去后 ,安装XCode的 时候 ,失败了.错误信息: But when i have tried to install the Xcode it ...