1.0 可以利用Intent吧数据传递给上一个活动,新建一个叫“hellotest01”的项目。

新建活动FirstActivity,勾选“Generate Layout File”和“Launcher Activity”。

修改AndroidMainifest.xml中的内容:

<activity
android:name=".FirstActivity"
android:label="第一个活动">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

在布局文件activity_first.xml增减一个按钮:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstActivity">
<Button
android:id="@+id/button_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮1"
/>
</android.support.constraint.ConstraintLayout>

显示Intent调用,FirstActivity .java:

package com.example.hellotest01;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class FirstActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button button1 = (Button) findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "你好,活动二";
Intent intent = new Intent(FirstActivity.this,SencondActivity.class);
// intent提供一系列的putExtra()方法重载
// 第一个参数是键,方便目标活动接收时取值,第二个参数才是真正传递的数据。
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
}
}

新建活动SencondActivity,勾选“Generate Layout File”。

SencondActivity.java(负责接收,并用debug.d 打印):

package com.example.hellotest01;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; public class SencondActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("**********活动二**********",data);
}
}

运行:

2.0 返回数据刚给上一个活动

新建活动ThirdActivity,勾选“Generate Layout File”。

由于之前忘了给新建的活动SecondActivity和ThirdActivity弄个名字,这里修改AndroidMainifest.xml中的内容补上:

 <activity android:name=".ThirdActivity"
android:label="第三个活动"></activity>
<activity android:name=".SencondActivity"
android:label="第二个活动"/>

给活动FhirdActivity布局增加一个Button,activity_third.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ThirdActivity"> <Button
android:id="@+id/button_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮3" />
</android.support.constraint.ConstraintLayout>

SecondActivity.java(说明解释都在源代码里面):

package com.example.hellotest01;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button; public class SencondActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sencond);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("**********活动二**********", data); Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "你好,活动三";
Intent intent = new Intent(SencondActivity.this, ThirdActivity.class);
// 用startActivityForResult启动活动ThirdActivity,请求码只需要一个唯一值即可,这里传入1 startActivityForResult(intent, 1);
}
});
} // 在活动ThirdActivity被销毁之后会回调上一个活动的onActivityResult()方法,
// 因此我们需要在活动SencondActivity中重写这个方法来得到返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//onActivityResult() 方法带有三个参数
// requestCode 在启动活动中传入的请求码
// resultCode 在返回数据时传入的处理结果
// data 携带着返回数据的Intent
// 由于在一个活动中有可能调用onActivityResult()方法去启动很多不同的活动
// 每一个活动返回的数据都会调用onActivityResult()方法,
// 因此我们需要做的是检查requestCode的值来判断数据来源,确定数据是从ThirdActivity返回之后,
// 再通过resultCode的值来判断处理结果是否成功
// 最后从data中取值并进行数据操作。
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("**********返回数据为**********", returnedData);
}
break;
default:
}
}
}

ThirdActivity.java(说明解释都在源代码里面):

package com.example.hellotest01;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class ThirdActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third); Button button3 = (Button) findViewById(R.id.button_3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 新建一个启动器,不过只用来传递数据而已,没有任何意图
Intent intent = new Intent();
intent.putExtra("data_return", "你好,活动二");
// setResult()方法专门用于返回上一个为活动数据的
// 第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK和RESULT_CANCELED这两个值
// 第二个参数则把带有数据的Intent传递回去,然后调用finish()方法销毁当前活动
setResult(RESULT_OK, intent);
finish();
}
});
}
}

完毕,运行,因为就创建活动FirstActivity为主活动,所以需要一个个点过去,按钮一 →按钮二 →按钮三:

3.0 当然,这样有个缺点,如果用户不是通过点击按钮,而是通过Back键(手机上的后撤/返回键)会到的活动SecondActivity,这样数据无法返回,解决方案:

在ThirdActivity.java中重写onBackPressed()方法来解决:

package com.example.hellotest01;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class ThirdActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third); Button button3 = (Button) findViewById(R.id.button_3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 新建一个启动器,不过只用来传递数据而已,没有任何意图
Intent intent = new Intent();
intent.putExtra("data_return", "你好,活动二,button");
// setResult()方法专门用于返回上一个为活动数据的
// 第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK和RESULT_CANCELED这两个值
// 第二个参数则把带有数据的Intent传递回去,然后调用finish()方法销毁当前活动
setResult(RESULT_OK, intent);
finish();
}
});
} @Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return","你好,活动二,back");
setResult(RESULT_OK,intent);
finish();
}
}

运行,点击:按钮一 →按钮二 →按钮三,这时候回到“活动二”界面,再按下“按钮二”,这时候点击“Back键”: 

【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动的更多相关文章

  1. android 4.0.4系统下实现apk的静默安装和启动

    转 android 4.0.4系统下实现apk的静默安装和启动 分类: Android 2013-02-14 14:13 1762人阅读 评论(10) 收藏 举报 最近在android 4.0.4系统 ...

  2. Shell $?获取函数返回值或者上一个命令的退出状态

    Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...

  3. jquery 实现只能选中一个checkbox,选中当前的去除上一个

    jq 实现只能选中一个checkbox,选中当前的去除上一个. <div id="checkboxed"> <input name="check1&qu ...

  4. android webview点击返回键回到上一个html

    android webview点击返回键返回上一个html @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ( ...

  5. android 6.0 Intent 安装apk闪退

    需求描述: 利用android系统自带的DownloadManager下载apk文件,并且打开安装界面. 问题描述: 关于DownloadManager的使用网上有很多例子,在此不啰嗦.下载完成之后在 ...

  6. android 8.0 intent安装apk失败屏幕闪过

    需要做两处设置: 1.android8.0要加一条权限: <uses-permission android:name="android.permission.REQUEST_INSTA ...

  7. Android 7.0 行为变更

    Android 7.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Android 应用,请注意 ...

  8. android 8.0变更

    Android 8.0 行为变更 Android 8.0 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 其中大部分变 ...

  9. Android 7.0 新增功能和api

    Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 A ...

随机推荐

  1. 老男孩Day17作业:后台管理平台编辑表格

    一.作业需求: 后台管理平台 ,编辑表格: 1. 非编辑模式: 可对每行进行选择: 反选: 取消选择 2. 编辑模式: 进入编辑模式时如果行被选中,则被选中的行万变为可编辑状态,未选中的不改变 退出编 ...

  2. kotlin 注意的地方

    1 . kotlin let 用法: let(val -> ) 注意:这  -> 后面不能有 花括号!!!! 2 . kotlin 中 如果使用了 @Transactional 注解.请让 ...

  3. python之读取文件的测试数据

    假设我们有一个叫testdata.txt的文件,现在在这个文件里面有测试数据,我们怎么利用前2小章学习的知识,读取测试数据呢? 测试数据如下: url:https://www.cnblogs.com/ ...

  4. python之文件读写(1)

    1. 从文件读取数据 关于对文件的操作,使用open(filename, mode),打开文件.与之对应的,close()用来关闭文件.对文件操作完毕切记要关闭. open函数参数: mode 参数有 ...

  5. Miller_Rabin素数测试【学习笔记】

    引语:在数论中,对于素数的研究一直就很多,素数测试的方法也是非常多,如埃式筛法,6N±1法,或者直接暴力判(试除法).但是如果要判断比较大的数是否为素数,那么传统的试除法和筛法都不再适用.所以我们需要 ...

  6. BZOJ - 2440 容斥定理

    组合枚举n/i/i,贡献为miu倍 /*H E A D*/ int mu[maxn],prime[maxn],cnt; bool isprime[maxn]; void sai(int n){ mu[ ...

  7. svn的branch truck tag

    对于branch truck tag一直迷迷糊糊的,想搞明白,但是一直又没来弄明白,最近就用了这种方式来开发 可以我又不是完全了解怎么操作,所以查看了下资料,这个解释得很详细呀,连我都看得懂的东西,真 ...

  8. PIE软件介绍

    1. 产品概述 PIE(Pixel Information Expert)软件是北京航天宏图信息技术股份有限公司自主研发的新一代遥感影像处理软件,北京航天宏图信息技术股份有限公司是国内知名的卫星应用服 ...

  9. (转)用shell脚本实现杨辉三角的4个实例!

    概述:    中国古代数学家在数学的许多重要领域中处于遥遥领先的地位.中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页.杨辉三角形,是二项式系数在三角形中的一种几何排列.杨辉 ...

  10. pat02-线性结构1. Reversing Linked List (25)

    02-线性结构1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, ...