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

4

2 回答 2

0

将 Extras 添加到 Intent 中,为新启动的 Activity 提供运行时状态和正确配置自身所需的主题信息。

于 2013-02-20T20:27:52.157 回答
0

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

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

于 2013-02-20T22:25:26.007 回答