【问题标题】:how do I restart an activity in android? [duplicate]如何在android中重新启动活动? [复制]
【发布时间】:2011-04-03 15:19:43
【问题描述】:

在我正在编写的应用程序中,有一部分允许您更改窗帘设置。问题是,在重新创建活动之前,此设置不会生效。有没有办法告诉应用程序使用 onResume() 方法重新启动(希望允许它保存 onSaveInstanceState() 中的所有内容)?

【问题讨论】:

  • 你能不能先启动另一个实例然后在原始实例上调用完成?
  • @Blundell - 诀窍是在启动新实例之前调用finish()
  • 基本上,我想做的就是能够从 onRestart() 方法中调用 onCreate() 方法。我该怎么做才能让 onSaveInstanceState() 保存所有内容。因为有了这个,一切都会被重置,因为它是一个全新的活动?
  • @Ephraim - 也许您可以提供有关您要完成的工作的更多详细信息。你所说的不符合我对Activity lifecycle 的理解。创建、启动和恢复活动是完全独立的事情,您似乎想以某种方式将它们混合在一起。
  • @Ted Hopp 该程序的工作方式是,您输入一个单词,然后在屏幕上为您提供与该单词对应的窗帘编号。如果您要更改设置,则与该单词对应的数字会更改。问题是,该设置在重新启动活动之前不会生效(如果您要更改方向,它将允许设置生效,但不会这样做)我想要的是只要程序启动其 onRestart() 方法,就可以执行此操作。 (我希望 EditText 中的文本保持不变,就像在 onSaveInstanceState() 中一样)。

标签: android android-activity restart onresume


【解决方案1】:

这是posted before

Intent intent = getIntent();
finish();
startActivity(intent);

从 API 级别 11 开始,您也可以只调用活动的 recreate() 方法。这不仅更简洁,因为它的代码更少,它还避免了如果您的 Activity 是由隐式 Intent 启动时可能出现的问题。

【讨论】:

  • 基本上,我想做的就是能够从 onRestart() 方法中调用 onCreate() 方法。我该怎么做才能让 onSaveInstanceState() 保存所有内容。因为有了这个,一切都会被重置,因为它是一个全新的活动?
  • 程序的工作方式是,你输入一个单词,然后在屏幕上,它会给你一个与该单词对应的窗帘编号。如果您要更改设置,则与该单词对应的数字会更改。问题是,该设置在重新启动活动之前不会生效(如果您要更改方向,它将允许设置生效,但不会这样做)我想要的是只要程序启动其 onRestart() 方法,就可以执行此操作。 (我希望 EditText 中的文本保持不变,就像在 onSaveInstanceState() 中一样)。
【解决方案2】:

也许您可以像演示的那样重新启动活动,但传递一些意图附加内容以在重新启动时将您的字符串发回。

Intent intent = getIntent();
intent.putExtra(STRINGTOSAVE, "Save this string");
finish();
startActivity(intent);

在你的 onCreate 中你当然会想要检索字符串

Intent intent = getIntent();
String STRINGTOSAVE = intent.getStringExtra(ActivityName.STRINGTOSAVE);

然后使用检索到的字符串重新应用文本字段和您需要的任何其他操作。

【讨论】:

    最近更新 更多