gpt4 book ai didi

android - 被调用的Activity退出时如何返回结果 'in a natural way'?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:01 25 4
gpt4 key购买 nike

什么工作正常

我的应用程序中有 2 个 Activity 。第一个 Activity 调用第二个 Activity 以获取结果。

第二个 Activity 显示一个新布局并让用户执行某些操作。有一个“确定”按钮。当用户按下此按钮时,第二个 Activity 结束,用户返回到第一个 Activity 。

在幕后,第一个 Activity 像这样调用第二个 Activity :

Intent intent = new Intent(this, NextAct.class);
intent.putExtra("input", input);
this.startActivityForResult(intent, 99);

按下“确定”按钮,第二个 Activity 返回结果如下:

Intent intent = new Intent();
intent.putExtra("output", output);
setResult(RESULT_OK, intent);
finish();

之后,第一个 Activity 的 onActivityResult 被调用,结果成功:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// requestCode is 99
// resultCode is -1
// data holds my output
}

以上设置完美运行

什么不起作用

现在我有一个简单的要求,我希望用户关闭第二个 Activity 不是使用“确定”按钮,而是使用“硬件返回”按钮以自然的方式。

我尝试在第二个 Activity 的 onStoponDestroy 方法中移动 setResult 逻辑,但结果是 onActivityResult 在第二个 Activity 的 onStoponDestroy 方法之前被调用,因此 setResult 逻辑 没有机会运行全部。

然后我尝试像这样在第二个 Activity 的onPause方法中移动setResult逻辑

protected void onPause() {
super.onPause();
Intent intent = new Intent();
intent.putExtra("output", output);
setResult(RESULT_OK, intent);
//finish(); enabling or disabling this does not work
}

但尽管 onPauseonActivityResult 之前被调用并且 setResult 逻辑 正常运行,但我仍然在 onActivityResult 中得到所有空值

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// requestCode is 99
// resultCode is 0
// data comes as null
}

我需要知道为什么会这样,如果 onResume 不是放置 setResult 逻辑 的合适位置,最自然的方法是什么?

非常感谢。

最佳答案

Now I had a simple requirement, I wanted the user to close the second activity not with an "OK" button, but in a natural way with "HARDWARE BACK" button.

对于 startActivityForResult() 场景,这通常不是“自然的”。 BACK 按钮应该允许用户告诉您“不,这不行”(即取消)。

这并不意味着您一定要有一个确定按钮。例如,如果 NextAct 是一个 ListActivity,典型的模式是点击一个列表项被视为“OK”(即调用 setResult()finish() 来自 onListItemClick()),BACK 表示“我不是真的要开始 NextAct,抱歉".

I need to know why this is happening

您调用 setResult() 的时间太晚了。如果用户按下 BACK,到 onPause() 时,结果 (RESULT_CANCELED) 已经确定。

if onResume is not a proper place to put setResult logic

onResume() 不是“放置 setResult 逻辑”的合适位置

what is the most natural way to do it?

可能“确定”按钮是“最自然的方式”。

但是,如果出于某些奇怪的原因您确实希望 BACK 按钮表示“确定”,请覆盖 onBackPressed() 并在链接到之前调用 setResult()带有 super.onBackPressed() 的父类(super class)。

关于android - 被调用的Activity退出时如何返回结果 'in a natural way'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5060971/

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