gpt4 book ai didi

android - onActivityResult 在错误的 Activity 中被调用

转载 作者:太空狗 更新时间:2023-10-29 16:36:47 25 4
gpt4 key购买 nike

基本上:Activity A 调用startActivityForResult,启动Activity B。此时,Activity B 应该回调Activity A 的onActivityResult 方法。相反, Activity B 随后会错误地 回调 Activity C 的 onActivityResult 方法。请注意,Activity B.getCallingActivity() 会按预期返回 Activity A。

更详细:

我有三个 Activity :

  • EditModuleActivity( Activity A)

  • EditMotorActivity( Activity B)

  • ConfigurationActivity( Activity C)

在 EditModuleActivity(Activity A)中,我有这段代码:

private void launchIntentFromHere(){
int requestCode = 101;
Intent editMotorIntent = new Intent(context, EditMotorActivity.class);
editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item);
editMotorIntent.putExtra("requestCode", requestCode);
setResult(RESULT_OK, editMotorIntent);
startActivityForResult(editMotorIntent, requestCode);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
DbgLog.error("*************************** why is this never getting called?");
}

在 EditMotorActivity(Activity B)中,我有这段代码:

private void doThisThing(Object item){
// blah blah build intent
DbgLog.error("calling activity: " + getCallingActivity().toString()); // this prints out Activity A, which is what I expect.
returnIntent.putExtra(EDIT_MOTOR_CONTROLLER, item);
setResult(RESULT_OK, returnIntent);
finish();
}

ConfigurationActivity(Activity C)里面有这个:

private void launchIntent(Object item){
Intent editMotorIntent = new Intent(context, EditMotorActivity.class);
editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item);
setResult(RESULT_OK, editMotorIntent);
startActivityForResult(editMotorIntent, 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// deals properly with the results
}

当我在 EditModuleActivity 中并启动 EditMotorActivity 时,ConfigurationActivity.onActivityResult 被调用。相反,当我在 EditModuleActivity 中并启动 EditMotorActivity 时,应该会调用 EditModuleActivity.onActivityResult 但那没有发生。

问题

  • 为什么调用了错误的 onActivityResult?

  • 如何调用正确的onActivityResult?我的期望不正确吗?这还有什么作用?

  • 如果调用错误,如何调用正确的?

我看到的答案没有帮助

像这样:

   B
/ \
A C

不是这个:

X   Z
\ /
Y

最佳答案

我是这样覆盖 onStop 方法的:

@Override
public void onStop(){
setResult(RESULT_CANCELED, new Intent());
finish();
}

基本上,我不明白 Android 生命周期是如何工作的。我认为 onStop() 只会在 Activity 被 KILLED 时被调用,而且我认为如果它正在等待另一个 Activity 的响应则不会被杀死。

所以发生的事情是这样的:Activity C 启动 Activity A,Activity A 启动 Activity B。当 Activity B 启动时,A.onStop() 被调用。然后,当 Activity B 完成时,它(正确地)尝试返回到 Activity A,但是 Activity A 已经停止,所以它一路返回到 Activity C。

关于android - onActivityResult 在错误的 Activity 中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com