4

这就是问题所在。我有一个应用程序,我想按下一个按钮,启动一个显示项目列表的新活动,允许用户选择任意数量的项目,单击提交并将该数据发送到调用新活动的原始活动物品清单。这是基本结构:

Activity A -> Activity B (select items, press submit) -> [already running] Activity A (receive sent items)

我来回发送数据没有问题。我确实遇到的问题是,当我尝试重新启动 Activity A 时,它会通过 Activity 的onCreate()方法。我不喜欢这样做,因为我希望能够在onCreate()方法中预先设置所有内容,然后通过方法补充已经存在的内容onRestart()。我不确定为什么onCreate()每次重新启动活动时都会调用该方法。我的猜测是我在活动 B 中调用活动的方式:

Intent intent = new Intent(this, PatientChartActivity.class);
intent.putExtra("checked", checked);
intent.putStringArrayListExtra("checked", checked);
startActivity(intent);

我一直在查看 Android 活动生命周期,但我不确定为什么它不会自动返回到以前的活动,除非我确实必须强制它这样做。我确信的一件事是正在运行的活动没有被破坏。我在方法中输入了一条Log.v(TAG, "DESTROY")日志消息,以onDestroy()确保它不会破坏活动。我尝试在启动活动时使用不同的标志来告诉系统我要恢复以前启动的活动,但这些标志似乎也不起作用。我可能会误解他们。我已经对这个主题进行了广泛的研究,但我发现的解决方案都没有帮助。这里是我发现的一个问题,似乎与我的相同,但似乎并没有解决我正在寻找的问题。我还查看了以下链接以了解解决此问题的其他可能途径,但没有奏效。

http://www.droidnova.com/use-intents-to-start-other-activities,76.html

http://www.warriorpoint.com/blog/2009/05/24/android-how-to-switch-between-activities/

4

2 回答 2

0

代替

startActivity(intent);

在您的活动 A 中,使用

startActivityForResult(intent);

这样,当该特定活动完成时,您将获得结果。在活动 A 中覆盖它:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //TODO handle here. 
}

活动 B 完成后,调用 this.finish()。然后它会返回到Activity A,并调用上面的方法,这意味着你在Activity A中的onCreate不会被调用。

于 2012-09-22T23:51:50.993 回答
0

根据您所说的实际完成的事情(“活动A->活动B(选择项目,按提交)-> [已经运行]活动A(接收发送的项目)”)是:

活动 A = 新实例 -> 前往活动 B = 新实例 -> 再次前往活动 A =新实例

因此,您的活动“堆栈”实际上是活动 A 的 2 个实例和活动 B 的一个实例。这就是为什么您在活动 A 中的第二次调用会对其进行初始化并再次调用“onCreate()”。该问题的解决方案之一,可能是最好的解决方案是:

从活动 A 使用此方法启动活动 B:'startActivityForResult()'。然后在活动 B 中,尽管像当前一样启动活动 A,但尝试通过此函数将结果设置回活动 A:'setResult (int resultCode, Intent data)',然后在活动 B 中调用'finish()'。在活动中A 实现 'onActivityResult()' 方法。

我现在将解释应用程序生命周期如何:

  • 活动 A 被初始化并启动活动 B 等待结果以便用它做“某事”。到目前为止,一切都很好。
  • 活动 B 被初始化,提交后它确实为活动 A 设置了一个结果。然后它自己完成并自动将结果传递给前一个活动。
  • 活动 A 再次获得焦点,已经初始化并且调用了 'onActivityResult()' 方法。在活动 B 中设置的“意图”现在在活动 B 中传递。

告诉我这是否有帮助以及您是否需要一些示例代码。

于 2012-09-23T01:02:17.967 回答