【问题标题】:Retrigger OnCreate() method of an activity重新触发活动的 OnCreate() 方法
【发布时间】:2015-03-18 10:09:21
【问题描述】:

在完成我们目前正在进行的活动后,是否可以重新触发我们正在返回的ActivityOnCreate() 方法?

我尝试了startActivityForResult() 方法,但这不是一个好的解决方案,因为它会混淆活动的backstack

另外,我不能使用活动的onResume() 方法,因为我需要做的功能(主题更改)只能在onCreate() 上完成才能正常工作。

对此有什么建议吗?我错过了什么吗?谢谢。

【问题讨论】:

  • 希望如果您在完成当前活动后通过意图调用返回活动,如果将调用 onCreate() 方法。

标签: android android-activity android-lifecycle oncreate


【解决方案1】:

我不确定您为什么要重新创建活动。 但我认为调用此方法可以帮助您:

reCreate();

来自http://developer.android.com

public void recreate() 在 API 级别 11 中添加

使用新实例重新创建此 Activity。这个结果 在本质上与创建 Activity 时相同的流程是由于 配置更改——当前实例将通过其 onDestroy() 的生命周期,然后在它之后创建一个新实例。

你也可以这样试试:

 startActivity(getIntent());
 finish();

【讨论】:

  • 我需要重新创建活动,因为我需要更改主题。如果我更改主题并返回此活动,则主题更改无效。只有在重新创建时,主题更改才会应用于活动。
  • 此方法将重新启动您的活动及其生命周期。我打电话 reCreate() 会帮助你。试试看,让我知道结果:)
  • 很遗憾,这个方法在返回活动时没有被调用。
  • 如我所说,完成当前活动后返回活动时不会触发recreate()。
  • 在你的 onActivityResult 中调用它!是工作 。我在同样的情况下使用它并为我工作:)
【解决方案2】:

如果我们直接从 onActivityResult() 方法调用 onCreate() 是可能的。

但这不建议破坏Android的Activity Life-cycle

如果你真的想在 onCreate() 中做一些有用的任务,那么你可以 在 onResume() 方法中这样做

根据您的要求,我了解到您希望在子活动完成后为您的活动视图设置新主题。

对于这种情况,您可以使用 Fragment。您只需要在onResume() 方法中添加一个新片段

  1. 片段创建:How to create Fragment

  2. 在 onResume() 中,将 content_frame 替换为您需要更改主题的新 Fragment

更新

来自您的 MainActivity.java

startActivityForResult( /* parameters for calling SecondActivity*/ );
finish();

这样,您的调用活动(即 MainActivity.java)就完成了。所以,当 SecondActivity 完成时,焦点会来到 MainActivity.java 的 onActivityResult() 并且 onCreate() 也会被调用,因为它已经完成了

【讨论】:

  • 是的,我知道。正如我所提到的,我尝试了这种方法,但它弄乱了活动生命周期,确实不是一个好的推荐解决方案。
  • 不,它只在 onCreate() 方法上正常工作,在调用超级构造函数之前。
  • 不应该这样。你能粘贴你的代码吗?
  • public static void onActivityCreateSetTheme(Activity activity) { switch (sTheme) { default: case THEME_DEFAULT: activity.setTheme(R.style.AppTheme);休息;案例主题_2:activity.setTheme(R.style.AppTheme2);休息; }}
  • 感谢您的努力,但片段采用了它所附加的活动的主题。因此,如果我无法更改活动的主题,片段仍将具有相同的主题。
猜你喜欢
  • 2021-04-18
  • 2013-03-09
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多