3

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

4

4 回答 4

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());
        }
    }

瞧,这成功了!

于 2013-07-22T17:53:21.220 回答
0

我建议使用 SharedPreferences。您可以在其中存储带有关联值的 lang 键,并在必要时对其进行更新。在您的 onResume() 方法中,您可以获得语言值,然后根据存储的值填充视图。

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(); 

这就是您开始工作所需的基础知识。

于 2013-07-22T09:27:56.303 回答
0

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

你可以简单地使用

finish();
startActivity(getIntent());

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

于 2013-07-22T09:32:17.557 回答
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 撰写的完整答案: 在应用程序本身内更改区域设置

于 2018-06-12T19:15:22.753 回答