完全停止或重新启动Android应用程序中的所有活动,以反映新的语言选择

完全停止或重新启动Android应用程序中的所有活动,以反映新的语言选择,android,Android,我正在开发一款需要双语(英语/西班牙语)的Android应用程序。我允许用户从首选项中选择所需的语言,并基于所选语言在应用程序的主活动(TabActivity的子类)中执行以下区域设置更改: private void setApplicationLanguage(String languageCode) { // Set the locale to the specified language code. Resources res = getResources(); D

我正在开发一款需要双语(英语/西班牙语)的Android应用程序。我允许用户从首选项中选择所需的语言,并基于所选语言在应用程序的主活动(TabActivity的子类)中执行以下区域设置更改:

private void setApplicationLanguage(String languageCode)
{
    // Set the locale to the specified language code.
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    android.content.res.Configuration conf = res.getConfiguration();
    conf.locale = new Locale(languageCode.toLowerCase());
    res.updateConfiguration(conf, dm);
}
主活动包含四个选项卡,每个选项卡都有自己的活动(有时是ActivityGroup)。我希望发生的是,当语言发生变化时,所有打开的活动都会简单地重新启动,这会导致用适当的语言重新加载它们的字符串。同样可以接受(但不太理想)的是完全销毁所有打开的活动,需要用户手动重新启动应用程序,因此所有字符串都将以适当的语言重新加载

我已尝试从主活动调用
finish()
,导致该活动退出。但是,当我重新启动应用程序时,主活动“托管”的子活动(每个选项卡一个)仍然以先前的语言显示。我想这是因为我的子活动没有递归地“完成”

我还尝试在主活动和其他活动上包括/排除AndroidManifest.xml中的“locale”属性,但我从未看到活动在本地更改后重新启动。那么,“重启”又将如何体现呢?它会调用
onCreate()
还是简单地调用
onResume()
,甚至是其他什么?如果这种方法会自动重新启动活动,在区域设置更改时调用
onCreate()
,那么在我的情况下,关于如何实现这一点的具体指导似乎是最好的方法


该解决方案需要在Android API 7级上运行,因此创建一个新的
Intent
,带有
flag\u ACTIVITY\u CLEAR\u TASK
标志显然是不可用的选项。

您可以使用
BroadcastReceiver
作为用于选项卡内容的每个
活动的内部类

onResume
中注册接收器,然后在
onPause
中取消注册


让主
活动
在区域设置更改时发送“粘性”广播,并使用
onResume
中的
registerReceiver
的结果检索
意图
,查看区域设置是否已更改。这也适用于任何“可见的”
活动
,以允许它动态更新数据。

我实现了一个
LocalBroadcastManager
,以告知相关方语言环境的变化。问题是我无法更新所有我想更新的东西,例如。G标签页上的标签。在“主要”(选项卡)活动中,效果最好的是:

    Intent intent = new Intent(mainActivity.getApplicationContext(), MainTabActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    mainActivity.startActivity(intent);
虽然我还没有得到我需要的工作,但很明显这是解决问题的最好方法。谢谢