Android中Activity之间的数据传递
在开发中,我们经常涌用到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的代码
- package app.linfeng.com.myapplication;
- import android.content.Intent;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- public class MainActivity extends AppCompatActivity {
- private Button bt_next;
- private Button bt_nextforreustl;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- bt_next = (Button) findViewById(R.id.bt_next);
- bt_nextforreustl = (Button) findViewById(R.id.bt_nextforresult);
- bt_next.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- /**
- * 通过intent携带数据,传递给下一个活动
- */
- Intent intent = new Intent(MainActivity.this,SecondAcitvity.class);
- intent.putExtra("data","这个送给SecondActivity的礼物");
- startActivity(intent);
- }
- });
- /**
- * 跳转到SecondActivity,并希望SecondActivity在销毁的时候放回数据
- *
- * */
- bt_nextforreustl.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(MainActivity.this,SecondAcitvity.class);
- /**
- * 请求码唯一就可以了。这里传入1
- */
- startActivityForResult(intent,1);
- }
- });
- }
- /**
- * 这个方法用于接收SecondActivty在销毁的时候回调的方法
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (requestCode){
- case 1:
- if(resultCode == RESULT_OK){
- String str = data.getStringExtra("GiveData");
- Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
- }
- break;
- default:
- }
- }
- }
- package app.linfeng.com.myapplication;
- import android.content.Intent;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- public class SecondAcitvity extends AppCompatActivity {
- private Button bt_showData;
- private Button bt_giveData;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_second_acitvity);
- bt_showData = (Button) findViewById(R.id.bt_showdata);
- bt_giveData = (Button) findViewById(R.id.bt_backdata);
- /**
- * 通过intent来接收上一个活动传递过来的数据
- */
- Intent intent = getIntent();
- final String str = intent.getStringExtra("data");
- if(str==null){
- bt_showData.setEnabled(false);
- bt_giveData.setEnabled(true);
- }else{
- bt_showData.setEnabled(true);
- bt_giveData.setEnabled(false);
- }
- bt_showData.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(SecondAcitvity.this,str,Toast.LENGTH_SHORT).show();
- }
- });
- /**
- * 给MainActivyt回赠礼物
- */
- bt_giveData.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.putExtra("GiveData","这是回赠给MainActivity的礼物");
- setResult(RESULT_OK,intent);
- finish();
- }
- });
- }
- /**
- * 用户点击放回键盘的时候需要返回数据
- */
- @Override
- public void onBackPressed() {
- Intent intent = new Intent();
- intent.putExtra("GiveData","这是回赠给MainActivity的礼物");
- setResult(RESULT_OK,intent);
- finish();
- }
- }
看到这里,相信大家也都清楚了吧。
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学习之Activity之间的数据传递
Activity与Activity之间很多情况下都需要进行数据的传递,下面就用几个简单的例子来看一下. (一).一个Activity启动另一个Activity并将数据传递到这个Activity当中 思 ...
- Android 数据传递(一) Activity之间的数据传递
bundle Google Bundle类说明 Bundle类是一个key-value对.Activity之间的数据通信可以通过bundle类来实现数据的存储.即将数据放入bundle里面,将Bund ...
- Android笔记(四) Activity之间的数据传递
我们之前使用Intent进行Activity之间的跳转,其实Intent还可以在启动活动的时候传递数据. Intent提供了一系列的putExtra方法以便我们把想要传递的数据暂存在Intent中,待 ...
- Android Activity之间的数据传递
1.向目标Activity传递数据: Intent intent=new Intent(this,Main2Activity.class); //可传递多种类型的数据 intent.putExtra( ...
- 从Android中Activity之间的通信说开来[转]
http://www.cnblogs.com/virusswb/archive/2011/08/02/2124824.html 引言 最近两个星期在研究android的应用开发,学习了android应 ...
- Android中Activity之间访问互传参数
public class MainActivity extends Activity { private static final int OTHER = 1; @Override protected ...
随机推荐
- 天地图OGC WMTS服务规则
图层名称 服务地址 投影类型 矢量底图 http://t0.tianditu.gov.cn/vec_c/wmts?tk=您的密钥 经纬度投影 http://t0.tianditu.gov.cn/vec ...
- nova Evacuate
作用:当一个 node down 掉后,在新的 node 上根据其 DB 中保存的信息重新 build down node 上虚机.这个往往在虚机 HA 方案中用到.它尽可能地将原来的虚机在新的主机上 ...
- ActiveMQ 的客户端选项
本章重点 怎么使用独占式消费者 消息分组的威力 理解流和二进制大对象 容错传输 计划消息分发 简介 上一章我们介绍了 ActiveMQ 的代理特性,本章我们将学习 ActiveMQ 客户端的一些高级特 ...
- Pycharm如何打断点
一. python代码的调试方式 1. 使用print语句打印出来 2. 在编辑工具中,加断点跟踪(打断点) 3. 使用日志模块,输出到日志中 下面我们来看一下如何打断点 二. 环境 python 3 ...
- poj2114树分治
题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vect ...
- 找到Office 2016 for MAC中AutoUpdate等组件的本地下载位置
更新:64位delta升级文件如: $ &>/dev/null /private/var/folders/8g/7f3zrs2j3hb1jx58z1_vkykh0000gn/T/MSau ...
- 解析Ceph: 恢复与数据一致性
转自:https://www.ustack.com/blog/ceph-internal-recovery-and-consistency/ 作为一个面向大规模的分布式存储系统,故障处理是作为一个常态 ...
- Spring_总结_04_高级配置(六)_Bean的初始化和销毁
一.前言 本文承接上一节:Spring_总结_04_高级配置(五)_运行时注入值
- 20165210 Java第五周学习总结
20165210 Java第五周学习总结 教材学习内容 - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. 内部类的类体中不可以声明类变 ...
- opencv中VideoCapture和cvCapture有什么区别?
VideoCapture和cvCapture其实是一样的,你可以去看看源码,VideoCapture其实在内部调用了cvCapture.这是不同 版本的opencv导致的.我接触到的opencv有过一 ...