Android - 单击返回时语言更改

时间:2013-07-22 09:18:46

标签: android back onresume

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

4 个答案:

答案 0 :(得分:4)

经过多次尝试,我找到了解决问题的方法。在我的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());
        }
    }

瞧,这就是诀窍!

答案 1 :(得分: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(); 

这是你需要的基础知识。

答案 2 :(得分:0)

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

您可以使用

finish();
startActivity(getIntent());

在检测到偏好更改时刷新活动。

答案 3 :(得分:0)

内置后退功能不会刷新代码,因此请在更改语言后执行此操作。

@Override
public void onBackPressed()
{
    //new MainActivity();
    Intent intent=new Intent(this,MainActivity.class);
    startActivity(intent);
}

并在Main Activity类中执行此操作

  public MainActivity() {
    //1- This code is responsible for updating the change of all Strings from a language to another
    //it will be called every time this activity is instantiated (da,since it is a constructor) , or when this activity gets
    // called by an intent.
    //2- Every String inside this Activity(ever fragment inside it ) will also be under the effect of change of language
    LocalUtils.updateConfig(this);
}

请查看以下答案并将其添加到其中。要获得Roberto.B和LarsH撰写的完整答案: Changing Locale within the app itself