是否可以重新创建活动并保留运行时实例?

时间:2013-02-20 19:07:22

标签: android android-activity android-preferences android-theme

我创建了一个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?或者至少在创建新实例时保留所有运行时实例和状态?

2 个答案:

答案 0 :(得分:0)

为意图添加额外功能,为新启动的Activity提供运行时状态和正确配置所需的主题信息。

答案 1 :(得分:0)

您无需强制重新创建活动。

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