3

我创建了一个SettingsActivity来让用户设置首选项。 其中一个偏好是肤色。是否有可能重新创建活动并保留运行时实例?

Intent settingIntent = new Intent(this, SettingsActivity.class); 
    startActivity(settingIntent); 

一旦用户完成设置,他\她会点击“完成”按钮返回到MainActivity。

Intent intent = new Intent(); 
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
    intent.setClass(this, MainActivity.class); 
    startActivity(intent); 
    finish(); 

但MainActivity并没有真正改变。

我意识到,我只适用于的onCreate()的变化

setTheme(SettingsActivity.getSkinColor()); // Get the preference from SharedPreference 
    setContentView(R.layout.mylayout); 

在这种情况下,我想我必须重新创建活动。所以我改变了intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

但是,当用户点击“完成”按钮时,它将创建一个新的MainActivity。

有没有办法在不重新创建活动的情况下应用setTheme?或者至少保留所有的运行时间实例和状态,当我创建一个新的?

回答

0

添加Extras以使新启动的Activity具有正确配置自身所需的运行时状态和主题信息的意图。

+0

如果我仍然想使用intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)来恢复栈中的活动。有没有办法通过使用intent.putExtra()来传递数据。或者当我解散设置活动时,是否有办法设置回调。 – 2013-02-20 21:18:36

0

您不需要强制重新创建活动。

在您主要活动的onResume()中,您可以检查主题是否已更改。如果是这样,只需再次调用setTheme(),然后再调用setContentView(),这将使用新主题重新创建您的布局。请记住重做您的所有findViewById()电话,因为您的所有View对象都已重新创建。

+0

假设我调用setTheme(android.R.style.Theme_Light)。我如何检查主题是否更改为其他resId? – 2013-02-21 03:11:34

+0

你可以在'onCreate()'中调用'getTheme()',并记住在一个成员变量中。在'onResume()'再次调用'getTheme()'并进行比较。 – 2013-02-21 09:46:33

相关问题