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方法来处理需要返回结果的交互场景,从而实现更加灵活和交互性强的应用程序设计。传递。

相关文章
|
11月前
|
存储 Android开发
Android startActivityForResult和onActivityResult的基本用法
Android startActivityForResult和onActivityResult的基本用法
76 0
|
6天前
|
安全 Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的深度对比
在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。本文旨在通过数据驱动的分析方法,深入探讨这两大操作系统在开发环境、用户界面设计及市场表现等方面的差异。引用最新的行业报告和科研数据,结合技术专家的观点,本文将提供对开发者和市场分析师均有价值的洞见。
|
8天前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计、性能优化以及市场覆盖等方面。通过对这些关键因素的比较分析,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众做出明智的平台选择。