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. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  2. zip与unzip

  3. Visual Studio 2019 秘钥

    Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 ProfessionalNYWVH-HT4X ...

  4. 关于python中的round()和javascript中的round()的比较

    ps:python的round()和javascript的round()的比较: javascript:Math.round():正常的标准舍入,就像我们学的数学课本上面的规则 python:pyth ...

  5. GCD(最大公约数)和LCM(最小公倍数)的求法

    GCD(最大公约数) (1)辗转相除法(欧几里得算法)(常用) 将两个数a, b相除,如果余数c不等于0,就把b的值给a,c的值给b,直到c等于0,此时最大公约数就是b (2)更相减损术 将两个书中较 ...

  6. AES/ECB/NoPadding 加减密

    package unit; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache. ...

  7. [转] Java8 日期/时间(Date Time)API指南

    [From] http://www.importnew.com/14140.html Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间 ...

  8. 地牢逃脱----DFS搜索最优解

    https://www.nowcoder.com/practice/0385945b7d834a99bc0010e67f892e38?tpId=85&tqId=29831&tPage= ...

  9. 使用类和对象、方法、循环、List、泛型来实现简单的图书管理系统

    Book.java import java.util.List; import java.util.Scanner; public class Book { private String name; ...

  10. PIE SDK矢量数据简单渲染

    1. 功能简介 PIE SDK对数据的符号化分为矢量数据渲染和栅格数据渲染两大类. 目前PIE SDK中针对矢量数据渲染包括简单渲染.唯一值渲染.分级渲染.自定义渲染:针对栅格数据渲染包括拉伸渲染.R ...