Android基础之startActivityForResult()的用法详解
作者:netcon 发布时间:2022-05-28 03:37:29
前言
安卓开发中一个很基础的操作就是打开一个 Activity ,另一个很必要的操作就是,打开一个 Activity ,在打开的 Activity 中操作之后并获得返回结果。
两个 Activity
为了演示这个操作,我们需要两个 Activity : MainActivity 和 OtherActivity ,在 MainActivity 中通过 Intent 启动 OtherActivity ,并获得 OtherActivity 结束后返回的结果,例子仅作演示,为了方便,我直接在 Java 文件中定义了控件,就不写布局文件了。
MainActivity.java
package net.conw.intenttest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements View.OnClickListener {
private EditText editText;
private Button button;
public static int REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
editText = new EditText(this);
button = new Button(this);
button.setText("Main");
button.setOnClickListener(this);
layout.addView(editText);
layout.addView(button);
setContentView(layout);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("text", editText.getText().toString());
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE && resultCode == OtherActivity.RESULT_CODE) {
editText.setText(data.getStringExtra("text"));
}
}
}
OtherActivity.java
package net.conw.intenttest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class OtherActivity extends Activity implements View.OnClickListener {
private EditText editText;
private Button button;
public static int RESULT_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
editText = new EditText(this);
button = new Button(this);
button.setText("Other");
button.setOnClickListener(this);
layout.addView(editText);
layout.addView(button);
setContentView(layout);
editText.setText(getIntent().getStringExtra("text"));
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("text", editText.getText().toString());
setResult(RESULT_CODE, intent);
finish();
}
}
整个代码的执行逻辑如下:
1、两个 Activity 的代码就是这样的, 当 MainActivity 中的 Button 被触发 onClick()
事件后,把 MainActivity 中的 EditText 的内容发给了 OtherActivity 。
2、OtherActivity 打开并初始化好控件后,把 EditText 的内容设置为 MainActivity 发过来的内容。
3、当 OtherActivity 中的 Button 被触发 onClick()
事件后,把 OtherActivity 中的 EditText 的内容返回给 MainActivity。
4、当返回到 MainActivity 时,会执行 ononActivityResult()
方法的内容,判断如果 RequestCode 和 ResultCode 无误后,把 MainActivity 中的 EditText 的内容改为 OtherActivity 返回的结果。(这里判断了 RequestCode 和 ResultCode ,所以 OtherActivity 通过 Back 键返回时, MainActivity 的内容不会改变)
所以结果就是,通过这样的方式打开这两个Activity,他们中的 EditText 的内容是同步的,一个 Activity 改变了,到另一个 Activity 中也会跟着改变。
总结
好了,以上就是关于Android中startActivityForResult() 的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
来源:http://conw.net/archives/44/


猜你喜欢
- AndroidManifest.xml <uses-feature>和<uses-permisstion>分析及比较
- 一、deleteById 和 delete为什么要把这两个方法放在一起呢?我们先看源码再说deleteById(Id id)(通过id进行删
- 下载 Android SDK,官网:www.android.com 我相信很多人跟我一样,进不去。Android Studio 中文官网 w
- 在写接口实现时,有时会有多个实现类。这篇文章介绍在调用时通过传入字符串来指定具体的实现类。一.接口与实现类:// 接口public inte
- Android 回调前言:Android中的回调最经典的就是点击事件设置监听(一般通过switch(v.getId()))这里写
- Mybatis plus中like查询问题又谈到了Mybatis plus了,真的很是痛心疾首,在做模糊查询的时候出现了一个问题,版本还是2
- 在Android上,不止一个途径来侦听用户和应用程序之间交互的事件。对于用户界面里的事件,侦听方法就是从与用户交互的特定视图对象截获这些事件
- 本文实例讲述了Java方法的参数传递机制。分享给大家供大家参考,具体如下:参数传递机制对于程序设计语言来说,一般方法(函数)的参数传递有两种
- 问题是这样的,我用eclipse发送httpclient请求如下没有问题,但是在idea中就返回400,为毛呢???excuse me?pa
- 工具准备jdk, maven, tomcat9, vscode;上述软件的安装配置在百度就能找到很多教程, 所以此处不详述.(jdk使用1.
- 一、背景有些业务场景下需要将 Java Bean 转成 Map 再使用。以为很简单场景,但是坑很多。二、那些坑2.0 测试对象import
- 一、题目描述题目:模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。实现:使用特殊域变量volatile实现同步。二、解题思路创建
- Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。
- 简介单例指的是只能存在一个实例的类(在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类,它是软件工程中使用最多的几种模
- 为什么我们要爬取数据在大数据时代,我们要获取更多数据,就要进行数据的挖掘、分析、筛选,比如当我们做一个项目的时候,需要大量真实的数据的时候,
- 本文实例讲述了C#检测DataSet是否为空的方法。分享给大家供大家参考。具体如下:下面的代码片段通过判断DataSet的Table数量来判
- 一、实现流程1.注册2.登录3.登录保持【状态续签】二、实现方法项目结构1.引入依赖<!-- spring-web --><
- 前言有时候可能会遇到需要批量修改文件格式的需求,但百度了很久都没有找到相关的应用什么的,于是学过两天 Android 的我想自己去弄一个 A
- 最近因为项目需要,自己实现了个可以自由移动,并且长按可以跳出一个控制播放的,大的悬浮窗。好,开始吧。首先我们先聊权限,悬浮窗需要在manif
- 可能导致问题的原因:1.nacos中的配置文件名不规范,官网有命名规则:“前缀”-&ldqu