我有一个主要活动(让我们称之为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();
}
答案 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));