- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
什么工作正常
我的应用程序中有 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 的 onStop 和 onDestroy 方法中移动 setResult 逻辑,但结果是 onActivityResult 在第二个 Activity 的 onStop 或 onDestroy 方法之前被调用,因此 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
}
但尽管 onPause 在 onActivityResult 之前被调用并且 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/
我是一名优秀的程序员,十分优秀!