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

情况A:我们需要从Activity_1启动并传递数据到Activity_2,Activity_2只需要接收来自Activity_1 的数据,但并不用做其他操作。

情况B:我们需要从Activity_1 启动Activity_2,同时希望Activity_2在销毁的时候向Activity_1传递数据。

首先我们来说一说情况A。

情况A是比较简单的,其实就Activity_1利用Intent的putExtra();方法来携带数据,然后Activity_2通过Intent的getExtra()方法来获取Activity_1传递过来的数据。

情况B比较麻烦一点点,但也是很简单。就是利用startActivityForResult()这个方法来启动Activity_2,然后Activity_2在利用Intent和setResult()方法来向Activity_1传送数据,最后,Activity_1通过回调方法onActivityResult()来接收Activity_2数据。

我们先来看看运行截图吧

然后我们看看代码,由于布局文件很简单。这里就不贴出布局文件了。就看看两个Activity的代码

  1. package app.linfeng.com.myapplication;
  2.  
  3. import android.content.Intent;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9.  
  10. public class MainActivity extends AppCompatActivity {
  11.  
  12. private Button bt_next;
  13. private Button bt_nextforreustl;
  14.  
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19.  
  20. bt_next = (Button) findViewById(R.id.bt_next);
  21. bt_nextforreustl = (Button) findViewById(R.id.bt_nextforresult);
  22.  
  23. bt_next.setOnClickListener(new View.OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. /**
  27. * 通过intent携带数据,传递给下一个活动
  28. */
  29. Intent intent = new Intent(MainActivity.this,SecondAcitvity.class);
  30. intent.putExtra("data","这个送给SecondActivity的礼物");
  31. startActivity(intent);
  32. }
  33. });
  34.  
  35. /**
  36. * 跳转到SecondActivity,并希望SecondActivity在销毁的时候放回数据
  37. *
  38. * */
  39. bt_nextforreustl.setOnClickListener(new View.OnClickListener() {
  40. @Override
  41. public void onClick(View v) {
  42. Intent intent = new Intent(MainActivity.this,SecondAcitvity.class);
  43. /**
  44. * 请求码唯一就可以了。这里传入1
  45. */
  46. startActivityForResult(intent,1);
  47. }
  48. });
  49.  
  50. }
  51. /**
  52. * 这个方法用于接收SecondActivty在销毁的时候回调的方法
  53. */
  54. @Override
  55. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  56.  
  57. switch (requestCode){
  58. case 1:
  59. if(resultCode == RESULT_OK){
  60. String str = data.getStringExtra("GiveData");
  61. Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
  62. }
  63. break;
  64. default:
  65. }
  66. }
  67. }
  1. package app.linfeng.com.myapplication;
  2.  
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.Toast;
  9.  
  10. public class SecondAcitvity extends AppCompatActivity {
  11.  
  12. private Button bt_showData;
  13. private Button bt_giveData;
  14.  
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_second_acitvity);
  19.  
  20. bt_showData = (Button) findViewById(R.id.bt_showdata);
  21. bt_giveData = (Button) findViewById(R.id.bt_backdata);
  22.  
  23. /**
  24. * 通过intent来接收上一个活动传递过来的数据
  25. */
  26. Intent intent = getIntent();
  27. final String str = intent.getStringExtra("data");
  28. if(str==null){
  29. bt_showData.setEnabled(false);
  30. bt_giveData.setEnabled(true);
  31. }else{
  32. bt_showData.setEnabled(true);
  33. bt_giveData.setEnabled(false);
  34. }
  35.  
  36. bt_showData.setOnClickListener(new View.OnClickListener() {
  37. @Override
  38. public void onClick(View v) {
  39. Toast.makeText(SecondAcitvity.this,str,Toast.LENGTH_SHORT).show();
  40. }
  41. });
  42.  
  43. /**
  44. * 给MainActivyt回赠礼物
  45. */
  46. bt_giveData.setOnClickListener(new View.OnClickListener() {
  47. @Override
  48. public void onClick(View v) {
  49. Intent intent = new Intent();
  50. intent.putExtra("GiveData","这是回赠给MainActivity的礼物");
  51. setResult(RESULT_OK,intent);
  52. finish();
  53. }
  54. });
  55.  
  56. }
  57.  
  58. /**
  59. * 用户点击放回键盘的时候需要返回数据
  60. */
  61. @Override
  62. public void onBackPressed() {
  63. Intent intent = new Intent();
  64. intent.putExtra("GiveData","这是回赠给MainActivity的礼物");
  65. setResult(RESULT_OK,intent);
  66. finish();
  67. }
  68.  
  69. }

看到这里,相信大家也都清楚了吧。

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学习之Activity之间的数据传递

    Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...

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

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

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

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

  7. Android Activity之间的数据传递

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

  8. 从Android中Activity之间的通信说开来[转]

    http://www.cnblogs.com/virusswb/archive/2011/08/02/2124824.html 引言 最近两个星期在研究android的应用开发,学习了android应 ...

  9. Android中Activity之间访问互传参数

    public class MainActivity extends Activity { private static final int OTHER = 1; @Override protected ...

随机推荐

  1. 天地图OGC WMTS服务规则

    图层名称 服务地址 投影类型 矢量底图 http://t0.tianditu.gov.cn/vec_c/wmts?tk=您的密钥 经纬度投影 http://t0.tianditu.gov.cn/vec ...

  2. nova Evacuate

    作用:当一个 node down 掉后,在新的 node 上根据其 DB 中保存的信息重新 build down node 上虚机.这个往往在虚机 HA 方案中用到.它尽可能地将原来的虚机在新的主机上 ...

  3. ActiveMQ 的客户端选项

    本章重点 怎么使用独占式消费者 消息分组的威力 理解流和二进制大对象 容错传输 计划消息分发 简介 上一章我们介绍了 ActiveMQ 的代理特性,本章我们将学习 ActiveMQ 客户端的一些高级特 ...

  4. Pycharm如何打断点

    一. python代码的调试方式 1. 使用print语句打印出来 2. 在编辑工具中,加断点跟踪(打断点) 3. 使用日志模块,输出到日志中 下面我们来看一下如何打断点 二. 环境 python 3 ...

  5. poj2114树分治

    题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vect ...

  6. 找到Office 2016 for MAC中AutoUpdate等组件的本地下载位置

    更新:64位delta升级文件如: $ &>/dev/null /private/var/folders/8g/7f3zrs2j3hb1jx58z1_vkykh0000gn/T/MSau ...

  7. 解析Ceph: 恢复与数据一致性

    转自:https://www.ustack.com/blog/ceph-internal-recovery-and-consistency/ 作为一个面向大规模的分布式存储系统,故障处理是作为一个常态 ...

  8. Spring_总结_04_高级配置(六)_Bean的初始化和销毁

    一.前言 本文承接上一节:Spring_总结_04_高级配置(五)_运行时注入值

  9. 20165210 Java第五周学习总结

    20165210 Java第五周学习总结 教材学习内容 - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. 内部类的类体中不可以声明类变 ...

  10. opencv中VideoCapture和cvCapture有什么区别?

    VideoCapture和cvCapture其实是一样的,你可以去看看源码,VideoCapture其实在内部调用了cvCapture.这是不同 版本的opencv导致的.我接触到的opencv有过一 ...