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. [译文]Casperjs1.1.0参考文档-安装

    安装 Casperjs能被安装在mac osx,windows 和大多数linux版本 依赖项 PhantomJS1.82及以上 Python2.6及以上(很多人忘了安装python导致安装失败) 1 ...

  2. P4313 文理分科 最小割

    $ \color{#0066ff}{ 题目描述 }$ 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行描述,每个格 ...

  3. select 插入数据 不自增列实现自增

  4. 使用C#实现SSLSocket加密通讯 Https

    原文链接 http://blog.csdn.net/wuyb_2004/article/details/51393290 using System; using System.Collections; ...

  5. scrollView - tableView - collectionView 滚动视图的滚动速度

    介绍: 每次滚动都会触发 didScroll 这个方法, 每次滚动都会有一个偏移量,滚动的快慢决定每一次偏移量的大小,可以通过两次滚动偏移量差,判断速度,从而根据速度大小对导航栏做一些操作 { CGF ...

  6. Hibernate学习笔记(一)—— Hibernate概述及入门

    一.Hibernatea概述 1.1 什么是Hibernate? 在介绍什么是Hibernate之前,我们先讨论一下什么是框架?框架是用来提高开发效率的,框架封装好了一些功能,我们需要使用这些功能时, ...

  7. window平台 php 安装 redis 扩展

    1.使用phpinfo() 函数查看PHP的版本信息 <?php phpinfo(); ?> 查看扩展文件版本(特别注意以php版本的 architecture 是x86还是64为准,不能 ...

  8. C++_标准模板库STL概念介绍3-函数对象

    函数对象也叫做函数符(functor). 函数符是可以以函数方式和( )结合使用的任意对象. 包括函数名,指向函数的指针,重载了()运算符的类对象. 可以这样定义一个类: class Linear { ...

  9. Codeforces - 38G 可持久化Treap 区间操作

    题意:\(n\)个人排队,每个人有重要度\(p\)和不要脸度\(c\),如果第\(i\)个人的重要度大于第\(i-1\)个人的重要度,那么他们之间可以交换,不要脸度-1,交换后先前的第\(i\)个人也 ...

  10. SPOJ - MAXXOR

    依然是异或运算,这次是限制L,R范围内挑2个数使其异或值最大 如果r最高为是pos,那最理想状态当然是(1ll<<pos+1)-1 只有2个数如果凑近最理想的状态?直接找紧挨着的一个就好, ...