2013-07-22 20 views
2

我有这个设置部分,我允许用户更改应用程序中显示的语言。当用户选择不同的语言时,活动被重新加载,以便可以应用语言的改变。但问题是,当用户在改变语言后点击右键时,后台活动中显示的语言仍然是相同的。 所以我的问题是,当我回到背景上的某些活动时,应该如何应用语言更改?我想我应该做些什么来检测onResume方法的变化,但我不确定它是什么。如果您有任何建议,请让我知道。 谢谢。Android - 点击后改变语言

+0

在ActivityDestination中监听** onResume **方法或在ActivitySource中监听** onBackPressed **。 – 2013-07-22 09:26:58

+0

如果您使用完成()返回上一个活动 尝试使用意图,而不是使用新语言刷新以前的活动 – user1283633

回答

3

经过多次尝试,我找到了解决我的问题。在我onCreate方法,我得到一个包含当前语言的价值SharedPreferences,并获得当前的语言:

SharedPrefrences languagepref = getSharedPreferences("language",MODE_PRIVATE); 
String language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage()); 

然后,在我的onResume方法,我提到变量language在上面的值赋给一个本地变量,并更新language的值。然后,我比较这两个变量 - 如果它们是不同的,我会破坏当前活动并启动另一:

@Override 
    public void onResume(){ 
     super.onResume();  

     String oldLanguage = language; 
     language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage()); 
     if (!oldLanguage.equals(language)){ 
      finish(); 
      startActivity(getIntent()); 
     } 
    } 

瞧,那没有的伎俩!

0

我会建议使用SharedPreferences。您可以在其中存储一个包含相关值的lang键,并在必要时进行更新。在您的onResume()方法中,您可以获取lang值,然后根据存储的值填充视图。

SharedPreferences sharedPreferences; 
sharedPreferences = this.getSharedPreferences("MyActivity", Activity.MODE_PRIVATE); 
String lang = sharedPreferences.getString("lang", "en-GB"); 

SharedPreferences.Editor editor; 
editor = sharedPreferences.edit(); 
editor.putString("lang", "en-US").commit(); 

这是您需要进行的基础知识。

+0

谢谢,我尽量按照您告诉我的方式尝试,但语言仍然没有“不会改变背景活动。 –

+0

你在哪里创建你的观点并设置他们的文本? –

0

您是否尝试在更改完成后重新启动活动?

你可以简单地使用

finish(); 
startActivity(getIntent()); 

刷新只要检测偏好变化的活动。

+0

我假设你的意思是刷新'onResume'中的活动?那么我试过了,由于整理和开始的无限循环,活动很难开始。 –

+0

除非你有任何保存的变量,你可以使用'onCreate(null);'。这应该也会重新启动您的活动。 – Traxex1909