安卓-startActivityForResult如何使用

一、startActivity 和 startActivityForResult 分别在什么场景下使用?

startActivity 通常用于以下场景:

  • 启动一个新的 Activity 来执行与当前 Activity 不同的功能。 引导用户进入其他页面或流程。

startActivityForResult 则适用于以下情况:

  • 需要从被启动的 Activity 中获取结果或数据。 根据返回的结果进行后续操作,例如更新界面、执行其他逻辑等。

一些具体的场景示例:
startActivity:

  • 启动设置页面。
  • 打开其他应用的特定功能。

startActivityForResult:

  • 从相册选择图片后返回结果。
  • 完成登录操作后返回登录状态。
  • 进行用户身份验证后返回验证结果。

在实际开发中,根据具体的需求来选择使用哪种方法。

二、如何使用startActivityForResult

  1. 使用 startActivityForResult 启动另一个活动 AnotherActivity。
  2. 传递了一个请求代码,比如100,以便在返回时进行区分。
  3. 在 onActivityResult 方法中处理返回结果。
    检查请求代码和结果状态是否符合预期。 获取返回的数据并进行相应的处理。

以下是一个使用 startActivityForResult 的简单示例代码:

import android.content.Intent;

public class MyActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        // 启动新的活动
        startActivityForResult(new Intent(this, AnotherActivity.class), 100);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 100 && resultCode == RESULT_OK) {
            // 处理返回结果
            String result = data.getStringExtra("result");
            // 在这里可以根据返回的结果进行相应的操作
        }
    }
}

在 AnotherActivity 中,可以通过以下方式返回结果:

  1. 在需要返回结果的地方,通过 Intent 对象设置结果数据。
  2. 可以使用 putExtra 方法将数据添加到 Intent 中。
  3. 然后,在结束活动时调用 setResult 方法,并设置结果代码。
Intent intent = new Intent();
intent.putExtra("result", "This is the result data.");
setResult(RESULT_OK, intent);
finish();

这样,返回的 Intent 中就包含了指定的结果数据,在 MyActivity 的 onActivityResult 方法中可以通过 getStringExtra 等方法获取到返回的数据。

三、返回结果是何时触发的?

返回结果的触发是在被启动的活动(即在上述示例中的 AnotherActivity)结束时发生的。

  1. 当 AnotherActivity 完成了它的任务,并准备返回时,它会调用 setResult 方法来设置结果代码和包含结果数据的Intent。
  2. 然后,系统会将这个 Intent 传递回调用 startActivityForResult 的活动(即在上述示例中的MyActivity),并触发 onActivityResult 方法的调用。
  3. 返回结果的触发时机是由 AnotherActivity的生命周期决定的,通常是在用户完成了在该活动中的操作,或者该活动自行完成了特定的任务后触发。

Q:如果setResult之后,没有finish会触发返回结果吗?
A:即使设置了 setResult,但没有调用 finish,也会触发返回结果。
当在 Activity 中设置了 setResult 时,系统会记住这个结果。然而,只有当该 Activity 正常结束(例如,用户按下返回键或通过其他方式结束)时,返回结果才会被传递回调用者的 onActivityResult 方法。
如果没有调用 finish,则 Activity 可能仍然处于活跃状态,直到它以某种方式结束。

P.S.备注备注-扫盲区:startActivity 如何使用?

Intent intent = new Intent(this, AnotherActivity.class);
startActivity(intent);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贴纸。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值