Android - 点击返回按钮时语言更改

3
我有一个设置部分,允许用户更改应用程序中显示的语言。当用户选择不同的语言时,需要重新加载活动,以便可以应用语言更改。但是问题在于,当用户更改完语言后立即点击返回键,后台活动中显示的语言仍然是相同的。
所以我的问题是,当我回到后台某个活动时,该如何应用语言更改?我认为我应该在 onResume 方法中检测语言更改,但我不确定具体是什么。如果您有任何建议,请告诉我。
谢谢。

请监听ActivityDestination中的onResume方法或ActivitySource中的onBackPressed方法。 - user2558337
如果您使用finish()返回到上一个活动,请尝试改用intent,这样它将使用新语言刷新先前的活动。 - mmoghrabi
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());
        }
    }

完成了,就是这样!


0

内置的返回按键功能不会刷新代码,所以在更改语言后请执行此操作。

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

在MainActivity类中,执行以下操作。
  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编写的完整答案如下: 在应用程序内更改语言环境

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

这是你需要开始的基础。


谢谢,我已经按照您告诉我的方式尝试了,但是后台活动中语言仍然没有改变。 - huong
你在哪里创建视图并设置它们的文本? - Scott Helme

0

你尝试过在更改完成后重新启动Activity吗?

你可以简单地使用

finish();
startActivity(getIntent());

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


我猜你的意思是在onResume中刷新活动?嗯,我尝试过了,但由于不断结束和启动的无限循环,活动几乎无法启动。 - huong
除非您有任何保存的变量可以使用 onCreate(null);。那应该也会重新启动您的活动。 - Traxex1909

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接