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之间的数据传递的更多相关文章

  1. Activity之间的数据传递-android学习之旅(四十七)

    activity之间的数据传递主要有两种,一种是直接发送数据,另一种接受新启动的activity返回的数据,本质是一样的 使用Bundle传递数据 Intent使用Bundle在activity之间传 ...

  2. activity之间的数据传递方法

    1  基于消息的通信机制 Intent--------boudle,extra 用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等 详细介绍下Intent机制 Inte ...

  3. Activity之间的数据传递

    最常用的Activity之间的数据传递. btnStartAty1.setOnClickListener(new View.OnClickListener() { @Override public v ...

  4. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

  5. Android学习总结——Activity之间传递参数

    核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象   软件环境:Android Studio   一.在 ...

  6. Android 数据传递(一) Activity之间的数据传递

    bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...

  7. Android中Activity之间的数据传递

    在开发中,我们经常涌用到Activity,那么既然用到了Activity,就一定免不了在两个或者多个Activity之间传递数据.这里我们先说一说原理,然后在看看代码和例子. 情况A:我们需要从Act ...

  8. Android笔记(四) Activity之间的数据传递

    我们之前使用Intent进行Activity之间的跳转,其实Intent还可以在启动活动的时候传递数据. Intent提供了一系列的putExtra方法以便我们把想要传递的数据暂存在Intent中,待 ...

  9. Android Activity之间的数据传递

    1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...

随机推荐

  1. (一)chrome扩展 - API小记

    browserAction 设置browser action的badge文字,badge 显示在图标上面 chrome.browserAction.setBadgeText({text:"i ...

  2. MySQL学习笔记(5) - 修改和删除数据库

    1.完整语句 ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACHER SET [=] charset_name; 2.修改数据库的编码方式 al ...

  3. nginx入门手册(一)

    1.nginx进程: nginx会启动多个进程: 一个主进程Master. 几个工作进程worker. 缓存加载器进程 缓存管理器进程 master主要工作: 1. 读取并验正配置信息: 2. 创建. ...

  4. 使用CSS3+jquery.js 实现微信抽奖转盘效果

    上次发表了一篇 微信抽奖转盘活动-效果源码分析 最近想起了刚接到这个项目时第一时间脑海里迸出的解决方法 “CSS3”! 为什么不能用CSS3来实现呢? 所以我打算用CSS3来实现这个效果.并不需要依赖 ...

  5. 菜鸟做HTML5小游戏 - 翻翻乐

    记录下开放过程.做小游戏开发,又要跨平台,flash又不支持iPhone,html5是最好的选择. 先看看最后效果: 好了,开始demo. 1.准备工作: 图片素材(省略...最后代码一起打包) 了解 ...

  6. 分享一个js生成二维码的库

    二维码用js生成会比用服务器生成方便很多,只要把window.location.href的值传入,即可生成对应的二维码..最主要是,这个库可以兼容ie6~ie9哦... 具体使用,请看官网:http: ...

  7. 使用NSTimer实现倒计时-备

    今天在CocoaChina上面看到有人在问倒计时怎么做,记得以前在看Iphone31天的时候做过一个,今天翻出来运行不了了,原因是我的IphoneSDK升级到3.1了,以前使用的是2.2.1,在2.2 ...

  8. 用windows live writer写博客

    用windows live writer写博客了,目前不支持writer的博客,暂时放弃,这正是我用writer写的第一篇内容. 如有知道怎么用weiter配置:凤凰博客.搜狐博客.QQ空间.百度空间 ...

  9. 利用GPS获取行车速度和距离

    这几天项目中需要GPS计算汽车的速度和行驶距离,这里简单记录一下使用过程 1 和平常使用地图一样,在Info.plist中添加位置请求 2 在viewdidLoad中初始化locationManage ...

  10. android slidingview

    http://blog.csdn.net/sky181772733/article/details/6969810 http://blog.csdn.net/ithomer/article/detai ...