问题来了。我有一个应用程序,我想在其中按下一个按钮,启动一个显示项目列表的新 Activity ,允许用户选择任意数量的项目,单击提交并将该数据发送到调用新 Activity 的原始 Activity 元素 list 。这是基本结构:
Activity A -> Activity B (select items, press submit) -> [already running] Activity A (receive sent items)
我来回发送数据没问题。我确实遇到的问题是,当我尝试重新启动 Activity A 时,它会通过 Activity 的 onCreate()
方法。我不想这样做,因为我希望能够预先在 onCreate()
方法中设置所有内容,然后通过 onRestart()
补充已经存在的内容方法。我不确定为什么每次重新启动 Activity 时都会调用 onCreate()
方法。我的猜测是我在 Activity B 中调用 Activity 的方式:
Intent intent = new Intent(this, PatientChartActivity.class);
intent.putExtra("checked", checked);
intent.putStringArrayListExtra("checked", checked);
startActivity(intent);
我一直在查看 Android Activity 生命周期,我不确定为什么它不会自动返回到之前的 Activity ,除非我确实必须强制它这样做。我可以肯定的一件事是正在运行的 Activity 没有被破坏。我在 onDestroy()
方法中放入了 Log.v(TAG, "DESTROY")
日志消息,确保它不会破坏 Activity 。我在启动 Activity 时尝试使用不同的标志来告诉系统我想恢复以前启动的 Activity ,但这些似乎也不起作用。我可能会误解他们。我已经就该主题进行了广泛的研究,但我发现的解决方案都没有帮助。 Here是我发现的一个问题,似乎与我的相同
但似乎没有解决我正在寻找的问题。我还查看了以下链接以了解解决该问题的其他可能途径,但没有奏效。
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/
最佳答案
根据你陈述的事情(“Activity A -> Activity B(选择项目,按提交) -> [已经运行] Activity A(接收发送的项目)”)实际完成的是:
Activity A = new Instance -> 转到 Activity B = new Instance -> 再次转到 Activity A = new Instance
所以您的 Activity “堆栈”实际上是 Activity A 的 2 个实例和 Activity B 的一个实例。这就是为什么您在 Activity A 中的第二次调用会初始化它并再次调用“onCreate()”。该问题的解决方案之一,可能是最好的解决方案是:
从 Activity A 使用此方法启动 Activity B:'startActivityForResult()'。然后在 Activity B 中,尽管按照您当前的方式启动 Activity A,但尝试通过此函数将结果设置回 Activity A:“setResult(int resultCode,Intent data)”,然后在 Activity B 中调用“finish()”。在 Activity 中实现“onActivityResult()”方法。
我现在将解释应用程序的生命周期:
- Activity A 已初始化并启动 Activity B 等待结果以便对其执行“某事”。到目前为止一切顺利。
- Activity B 已初始化,提交后它会为 Activity A 设置结果。然后它自行完成并自动将结果传递给上一个 Activity 。
- Activity A 再次获得焦点,ALREADY INITIALIZED 并调用“onActivityResult()”方法。在 Activity B 中设置的“Intent ”现在在 Activity B 中传递。
告诉我这是否有帮助,以及您是否需要一些示例代码。
关于android - 重新启动已经运行的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12548553/