我创建了一个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 :(得分:0)
为意图添加额外功能,为新启动的Activity提供运行时状态和正确配置所需的主题信息。
答案 1 :(得分:0)
您无需强制重新创建活动。
在主要活动的onResume()
中,您可以查看主题是否已更改。如果是这样,请再次调用setTheme()
然后再调用setContentView()
,这将使用新主题重新创建您的布局。请务必重做所有findViewById()
来电,因为您的所有View
个对象都已重新创建。