既然可以传递数据给下一个Activity,自然也可以返回数据给上一个Activity。返回上一个Activity时只需要点击back键就好,并没有一个用于启动Activity的Intent来传递数据,那怎么实现传递数据给上一个Activtiy呢?

数据回传举例:插入图片:从相册或者相机获取图片显示到备忘录。

其实Android是使用任务来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被称作返回栈(back stack)。栈是一种后进先出的数据结构,在默认情况下,每当启动一个新的Activity,就会在返回栈中入栈,并处于栈顶的位置。每当按下返回键(back)或者调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,前一个入栈的Activity就会重新处于栈顶的位置。

总结:每启动一个新的Activity就会覆盖在原Activity之上,点击Back键会销毁最上面的Activity,下面的一个Activity就会显示出来。

Activity类中还有一个用于启动Activity的startActivityForResult()方法,它期望在Activity销毁的时候能够返回一个结果给上一个Activity。

1.创建MainActivity和SingInActivity

我们在SingInActivity中输入账号和密码,按下返回按钮后使其在MainActivity中显示出来。

2.代码实现

activity_main.xml:就是一个跳转到SingInAvtivity的按钮和用于显示返回信息的TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity"> <Button
android:id="@+id/recharge"
android:layout_margin="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="注册!" />
<TextView
android:id="@+id/result_text"
android:textSize="23dp"
android:layout_margin="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/> </LinearLayout>

activity_singin.xml:只是放了两个用于输入信息的EditText

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".SingInActivity"> <EditText
android:id="@+id/user"
android:layout_margin="30dp"
android:hint="账号"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/password"
android:inputType="textPassword"
android:layout_margin="30dp"
android:hint="密码"
android:layout_width="match_parent"
android:layout_height="wrap_content"/> </LinearLayout>

MainActivity:

package com.java.androidstudy;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends AppCompatActivity {
private Button recharge;
private TextView result_text; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
recharge.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SingInActivity.class);
startActivityForResult(intent,1); //请求码是用来在onActivityResult()中判断数据的来源。也可以是别的数
//使用该方法启动的SingInActivity,在SingInActivity销毁后会调用onActivityResult()方法。我们重写该方法在这里接收返回过来的数据,并显示出来。
}
});
} private void initView(){
recharge = findViewById(R.id.recharge);
result_text = findViewById(R.id.result_text);
} @Override //请求码,处理结果,返回的数据
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode ==1){ //如果请求码为1
if(resultCode ==RESULT_OK){ //下一个Activity返回的结果为RESULT_OK,则接收数据并显示出来
String user = data.getStringExtra("user");
String password = data.getStringExtra("password");
result_text.setText("账号:"+user+" 密码:"+password);
}
}
}
}

SingInActivity:

package com.java.androidstudy;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast; public class SingInActivity extends AppCompatActivity {
private EditText user;
private EditText password; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_singin);
initView();
//将左上角的返回图标显示出来
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
} private void initView(){
user = findViewById(R.id.user);
password = findViewById(R.id.password);
} @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case android.R.id.home: //左上角返回图标点击事件
Intent intent = new Intent(); //还是用Intent传递数据,这里用的是Intent的空参构造器,不需要指定跳转的界面,因为按下返回按钮会返回到上一个Activity.
intent.putExtra("user",user.getText().toString());
intent.putExtra("password",password.getText().toString());
setResult(RESULT_OK,intent);//使用该方法向上一个Activity返回数据。第一个参数是处理结果,第二个参数是将带有数据的intent传递回去。
finish();
}
return super.onOptionsItemSelected(item);
}
}

运行效果:

这样就完成了数据的回传。

Android四大组件——Activity——Activity数据回传的更多相关文章

  1. Android四大组件之——Activity的开启:StartActivity()和StartActivityForResult()(图文详解)

                如需转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com   ...

  2. 【Android开发日记】之入门篇(四)——Android四大组件之Activity

    在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页 ...

  3. Android四大组件之Activity(活动)及其布局的创建与加载布局

    Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个 ...

  4. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  5. Android 四大组件之 Activity(二)

    1.综述 Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满 ...

  6. Android四大组件及activity的四大启动模式

    Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...

  7. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

    什么是Activity 关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen wi ...

  8. Android学习之路——Android四大组件之activity(二)数据的传递

    上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据 ...

  9. Android 四大组件之 Activity

    1 简介 Activity (活动) 即应用程序 显示的 界面.可以通过两种方式 设置显示的内容 1:纯代码方式 2:xml 布局方式 无论哪一种方式,都是通过 setContentView 来设置显 ...

  10. Android 四大组件之 Activity(一)

    1.Activity的定义及作用: Android系统中的四大组件之一,可以用于显示View.Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的一个应用程序的组 ...

随机推荐

  1. 钓鱼+DNS欺骗学习笔记

    钓鱼+DNS欺骗学习笔记 0x00 写在前面 原文链接: http://www.cnblogs.com/hkleak/p/5186523.html 感谢大佬无私教学 0x01 步骤如下 第一步:布置钓 ...

  2. 如何理解Node.js和JavaScript的关系

    一.Javascript的引擎 浏览器一般有两个引擎,一个是Html引擎,一个是脚本引擎. JavaScript是一种脚本语言,最初用于浏览器的动态显示,方便操作页面数据和内容.但实际上,它也可以在浏 ...

  3. 数据库连接Database link?

    在一个用户下,可以获取到另外的用户下的表的数据,通常在跨数据库时使用. create database link link93 connect to scott identified by tiger ...

  4. Spring框架的事务管理有哪些优点?

    它为不同的事务API  如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式. 它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如 它支持声明式事务管理 ...

  5. AOP 有哪些实现方式?

    实现 AOP 的技术,主要分为两大类: 静态代理 指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类, 因此也称为编译时增强: 编译时编织(特殊编译器实现) 类加载时编织( ...

  6. PACT 在微服务架构中的用途是什么?

    PACT 是一个开源工具,允许测试服务提供者和消费者之间的交互,与合同隔离, 从而提高微服务集成的可靠性. 微服务中的用法 用于在微服务中实现消费者驱动的合同. 测试微服务的消费者和提供者之间的消费者 ...

  7. (stm32学习总结)—对寄存器的理解 _

    芯片里面有什么 我们看到的 STM32 芯片是已经封装好的成品,主要由内核和片上外设组成.若与电脑类比,内核与外设就如同电脑上的 CPU 与主板.内存.显卡.硬盘的关系.STM32F103 采用的是 ...

  8. Python这些位运算的妙用,绝对让你大开眼界

    位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中,在手 ...

  9. 解决联想笔记本 安装VM虚拟机后每次启动都会导致电脑蓝屏问题

    现象描述: pc为联想笔记本 系统是微软家庭中文版,每次启动VM虚拟机都会出现蓝屏现象,出现错误代码system_service_exception 原因及解决方法: 对于Windows10家庭版  ...

  10. 使用Node.js版本管理器

    使用Node.js版本管理器 完全卸载Node.js 清除Package缓存:npm cache clean --force 卸载Node.js:wmic product where caption= ...