Android中使用startActivityForResult启动活动

简介: Android中使用startActivityForResult启动活动
Android中使用startActivityForResult启动活动

在本文中,我们将深入探讨Android开发中使用startActivityForResult方法启动活动的使用方法及其应用场景。


什么是startActivityForResult?

在Android开发中,startActivityForResult方法用于启动一个新的活动(Activity)并期望在该活动完成后返回结果数据给调用方。这种方式通常用于处理需要从子活动获取结果的情况,比如用户选择文件、拍照、选择日期等交互动作。

使用startActivityForResult的基本步骤
  1. 调用startActivityForResult方法启动活动
    在调用方活动中,通过调用startActivityForResult方法启动目标活动,并传递一个请求码(requestCode),用于标识这次启动请求。
Intent intent = new Intent(this, TargetActivity.class);
int requestCode = 1; // 任意定义的请求码
startActivityForResult(intent, requestCode);
  1. 在目标活动中设置结果并返回
    在目标活动中完成用户交互或其他操作后,通过setResult方法设置结果代码(resultCode)和可选的结果数据(Intent),然后调用finish方法关闭目标活动并返回结果给调用方。
Intent resultIntent = new Intent();
int resultCode = RESULT_OK; // 可以是任意的结果码,表示操作成功
resultIntent.putExtra("key", resultData); // 将结果数据放入Intent中
setResult(resultCode, resultIntent);
finish(); // 关闭当前活动返回调用方
  1. 在调用方活动中处理返回结果
    在调用方活动中重写onActivityResult方法,该方法会在目标活动调用setResult并关闭后被调用,可以在该方法中获取返回的结果数据并进行处理。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) { // 根据请求码判断是哪个请求的返回结果
        if (resultCode == RESULT_OK) { // 判断返回结果是否成功
            if (data != null) {
                // 处理返回的结果数据
                String result = data.getStringExtra("key");
                // 进行进一步的处理
            }
        } else if (resultCode == RESULT_CANCELED) {
            // 处理取消操作的情况
        }
    }
}
示例代码

下面我们通过一个示例来演示如何使用startActivityForResult方法:

package cn.juwatech.example;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 启动目标活动
        Intent intent = new Intent(this, TargetActivity.class);
        int requestCode = 1;
        startActivityForResult(intent, requestCode);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                if (data != null) {
                    // 处理返回的结果数据
                    String result = data.getStringExtra("key");
                    // 进行进一步的处理
                }
            } else if (resultCode == RESULT_CANCELED) {
                // 处理取消操作的情况
            }
        }
    }
}

在目标活动TargetActivity中,需要设置返回的结果数据:

package cn.juwatech.example;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class TargetActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_target);
        // 处理一些操作后返回结果
        Intent resultIntent = new Intent();
        String resultData = "这是返回的数据";
        resultIntent.putExtra("key", resultData);
        setResult(RESULT_OK, resultIntent);
        finish(); // 返回到调用方活动
    }
}
注意事项
  • 确保在调用方活动中注册了目标活动(TargetActivity)的声明。
  • 调用方活动和目标活动之间传递数据需要注意数据类型的匹配和处理。
  • 在目标活动中,设置结果并调用finish方法后,会触发调用方活动的onActivityResult方法。

通过以上步骤和示例,我们可以在Android开发中灵活运用startActivityForResult方法来处理需要返回结果的交互场景,从而实现更加灵活和交互性强的应用程序设计。传递。


相关文章
|
存储 SQL 人工智能
Android Activity启动流程一:从Intent到Activity创建
Android Activity启动流程一:从Intent到Activity创建
1031 0
|
Android开发
Android 11 添加Service服务SELinux问题
Android 11 添加Service服务SELinux问题
1019 1
|
Android开发
Android 自带的字体库、字体样式
Android 自带的字体库、字体样式
2334 0
Android 自带的字体库、字体样式
|
Android开发
【错误记录】Flutter 报错 ( Could not resolve io.flutter:flutter_embedding_debug:1.0.0. )(一)
【错误记录】Flutter 报错 ( Could not resolve io.flutter:flutter_embedding_debug:1.0.0. )(一)
1482 0
【错误记录】Flutter 报错 ( Could not resolve io.flutter:flutter_embedding_debug:1.0.0. )(一)
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2886 2
|
Android开发 开发者
Android SVG动画详细例子
本文详细讲解了在Android中利用SVG实现动画效果的方法,通过具体例子帮助开发者更好地理解和应用SVG动画。文章首先展示了动画的实现效果,接着回顾了之前的文章链接及常见问题(如属性名大小写错误)。核心内容包括:1) 使用阿里图库获取SVG图形;2) 借助工具将SVG转换为VectorDrawable;3) 为每个路径添加动画绑定属性;4) 创建动画文件并关联SVG;5) 在ImageView中引用动画文件;6) 在Activity中启动动画。文末还提供了完整的代码示例和源码下载链接,方便读者实践操作。
570 65
|
12月前
|
存储 前端开发 API
一篇文章实现Android图片拼接并保存至相册
本文详细介绍了一个Android图片拼接应用的实现过程,涵盖权限管理、图片选择、异步加载、拼接处理和保存至相册等功能。通过`ImageStitcher`类完成图片横向或纵向拼接,支持多张图片操作,并适配Android Q及以上版本的存储权限要求。代码结构清晰,包含关键步骤如权限检查、UI交互及MediaStore API使用,适合开发者快速上手并根据需求扩展功能。
336 5
|
Android开发 开发者 索引
Android实战经验之如何使用DiffUtil提升RecyclerView的刷新性能
本文介绍如何使用 `DiffUtil` 实现 `RecyclerView` 数据集的高效更新,避免不必要的全局刷新,尤其适用于处理大量数据场景。通过定义 `DiffUtil.Callback`、计算差异并应用到适配器,可以显著提升性能。同时,文章还列举了常见错误及原因,帮助开发者避免陷阱。
1440 9
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
3695 1
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
3955 1

热门文章

最新文章