如何重新创建以前的 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);
}
}
我有一个主 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);
}
}