【发布时间】:2011-09-05 23:34:56
【问题描述】:
我有一个可以启动子活动 B、C 或 D 的主活动 A。我使用 startActivityForResult(newIntent, REQUEST_CODE); 启动它们;
一旦显示,用户可以选择在 B、C 和 D 之间导航。活动 A 控制该导航。当他们选择屏幕“A”之间的交换时,首先调用 finishActivity(REQUEST_CODE);在显示的那个上,然后调用 startActivityForResult(newIntent, REQUEST_CODE);下一个。
在我的 onActivityResult 我有
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// these logs are just for my debugging
Log.w(this.toString(), "onActivityResult returned to by " + requestCode);
Log.w(this.toString(), "result code = " + resultCode );
// the Activity set this value if it was returning normally
if (RESULT_OK == resultCode)
{
Log.i(this.toString(), "---- the sub-activity returned OK ----");
// do some stuff
}// end if (RESULT_OK == resultCode)
// Else we got here because the user hit the back button or something went
// went wrong (RESULT_CANCELED). Either way we do not want to display this
// blank screen to the user. Take them back to the device connection screen.
else if (RESULT_CANCELED == resultCode)
{
finish();
}
}
由于某种原因,我每次都返回零或 RESULT_CANCELED,即使在我的子活动 B、C、D 中,我只在用户选择点击后退按钮时才设置该结果(我显示“你确定吗”对话框,他们选择退出。在 B、C、D 中,我在 onPause 中有以下内容。userExiting 是我在退出对话框中设置的标志。
protected void onPause()
{
Log.i(this.toString(), "onPause");
// hack to try to setResult for an activity whose finishActivty was called
if ( !this.exiting )
{
Log.i(this.toString(), "======== RESULT_OK ========");
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
}
displayed = false;
super.onPause();
}
有什么想法吗?
编辑 - 要明确的问题是,在旧 Activity 上调用 finishActivty 后,由于从未设置结果,Activity A 总是认为它应该退出。一个奇怪的副项目。直到用户导航两次才会发生这种情况。换句话说,B 被显示并且他们选择去 C. Works,但我可以在日志中看到 onActivityResult 没有被调用。用户选择从 C 到 D,繁荣,我看到两个对 onActivtyResult 的调用,'A;退出并显示 D 并且用户无法导航。
更新:由于这已经获得了很多意见,我想我会发布此更新。该项目演变为有时显示单个活动,有时显示一个组作为选项卡。在某些情况下,当用户退出选项卡时,需要将数据返回到启动选项卡的 Activity。在我添加 RESULT_CANCELED 下面的代码之前,总是会返回。还要确保在完成之前调用 setResult。
if (getParent() == null)
{
setResult(Activity.RESULT_OK, intent);
}
else
{
getParent().setResult(Activity.RESULT_OK, intent);
}
【问题讨论】:
-
顺便说一句,您确定在返回活动时确实需要显示“您确定”对话框吗?我会觉得这真的很烦人。相反,您应该让用户轻松回到原来的位置。
-
在我的情况下,我的要求不是让他们回到原来的位置,而是在他们按下后退出,在我们让“你确定”对话框用户意外退出之前。一旦他们离开 A 并前往 B、C 和 D,他们就再也不会回到 A。
-
哦,那可能是因为这不是后退按钮的预期行为。如果我在一个屏幕上,我会移动到一个新屏幕,然后回击我希望回到前一个屏幕。如果你遵循人们所期望的范式,你就会遇到更少的问题。