我已经知道如何更改我的应用程序的语言(更新配置)。我的代码还检查配置是否被系统更改并在“onCreate”方法中“修复它”。我什至创建了一个 ListPreference 让用户使用我的应用程序支持的语言来决定语言(并保存决定)。
假设我有 3 个活动(A、B 和 SettingsActivity)。Activity A 可以启动 Activity B 和 SettingsActivity。Activity B 可以启动 SettingsActivity。如果用户更改 SettingsActivity 中的语言,我可以使用以下代码毫无问题地更新其资源(在本例中为字符串):
//if (Build.VERSION_CODES.HONEYCOMB <= Build.VERSION.SDK_INT) {
// Disabled because it blinks and looks bad
// recreate();
// } else {
startActivity(getIntent());
finish();
overridePendingTransition(0, 0);
// }
但是,我无法更改已经打开的活动,因为我没有从 SettingsActivity 中引用它们。
我的问题:是否有任何干净的方法来更新资源或重新创建已经打开的活动?如果我没有找到更好的解决方案,我的方法将是上述方法之一:
- 使用启动活动
startActivityForResult
并返回代码以触发我已经用来重新创建活动的代码。 - 检查
onResume
方法内部是否当前语言已更改并执行相同操作。