如何重新创建以前的 activity?

How to recreate previous activity?

我有一个主 activity(我们称之为 A)和第二个 activity(我们称之为 B),用于更改应用程序的语言。关键是,当我单击按钮更改语言时,我还调用了 recreate(); 并且 B 更改了它的语言。直到这里没关系。当我回到主 activity (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();
}

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

2) 在 Activity A 中执行:

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

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

重新启动您的应用程序:

startActivity(new Intent(this, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent
                .FLAG_ACTIVITY_CLEAR_TOP));

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

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

private static final int ACTIVITY_B_REQUEST = 0;

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

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

这将为您启动Activity 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);
    }   
}