如何重新创建以前的活动?

时间:2015-03-17 18:02:18

标签: android recreate

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

我使用此代码翻译app(eng版本示例):

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

3 个答案:

答案 0 :(得分:4)

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

2)在Activity A执行:

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

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

答案 1 :(得分:3)

您需要在活动中实施onActivityResult()。这个link有更多信息,应该对您非常有帮助。简而言之:

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

private static final int ACTIVITY_B_REQUEST = 0;

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

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

这将为您启动活动B.每当活动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);
    }   
}

答案 2 :(得分:1)

重新启动您的应用:

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