7

我有一个主要活动(我们称之为 A)和第二个活动(我们称之为 B),用于更改应用程序的语言。关键是,当我单击按钮更改我也调用的语言时recreate();,B 更改了它的语言。到这里为止还好。当我回到主要活动(A)并且它没有更新语言时,问题就出现了,因为它没有被重新创建,那么,有没有办法从 B 重新创建 A 以更新 A?

我使用此代码翻译应用程序(英文版示例):

public void btnIngles_onClick(View v)
{
    Locale locale = new Locale("en");
    Locale.setDefault(locale);

    Configuration config = new Configuration();
    config.locale = locale;
    this.getApplicationContext().getResources().updateConfiguration(config, null);
    recreate();
}
4

3 回答 3

7

1)Activity B更改一些全局设置,例如可通过SharedPreferences以下方式访问

2)在Activity A做:

@Override
protected void onResume() {
    super.onResume();
    if(didLanguageChange)
      recreate();
}

问题解决了。Activity A 调用,因为它在进入前台onResume()时已切换到暂停状态。Activity B

于 2015-03-17T18:06:43.170 回答
4

您需要onActivityResult()在您的活动中实施。这个链接有更多信息,应该对你很有帮助。简而言之:

在您的活动 A 中,您需要创建一个用作请求代码的变量,如下所示:

private static final int ACTIVITY_B_REQUEST = 0;

然后,在按钮的 onClick 侦听器中,您将使用意图和startActivityForResult()函数启动活动:

Intent myIntent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(myIntent, ACTIVITY_B_REQUEST);

这将为您启动活动 B。每当 Activity B 完成时,onActivityResult都会被调用。您可以覆盖它并以您需要的任何方式实现它,但它可能看起来像这样:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == ACTIVITY_B_REQUEST && resultCode == RESULT_OKAY){
        // Handle this by doing what you need to refresh activity A.
    } else{
        super(requestCode, resultCode, data);
    }   
}
于 2015-03-17T18:08:29.760 回答
1

重新启动您的应用程序:

startActivity(new Intent(this, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent
                .FLAG_ACTIVITY_CLEAR_TOP));
于 2015-03-17T18:07:38.687 回答