我正在根据用户输入更改应用程序的语言。 在此之后,我必须重新创建活动以使更改可见。我到现在为止尝试了两种方法:
第一种方法:
Intent refresh = getIntent();
finish();
startActivity(refresh);
但事实是,虽然活动加载了新的语言字符串,但操作栏标题仍保留在以前的语言中。如果我关闭应用程序并再次加载屏幕一切都很好。 所以我认为我可能做错了什么并将代码更改为:
第二种方法:
Intent refresh = new Intent(this, FirstActivity.Class);
refresh.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(refresh);
finish();
请参阅Reference。
这会导致应用程序崩溃。任何见解都会非常有用。
注意: 我正在使用app.support.v7.app.ActionBarActivity
问题ScreenShot:
修改
我也尝试过:
Intent refresh =getIntent();
finish();
this.supportInvalidateOptionsMenu();
startActivity(refresh);
问题仍然存在。
编辑2: 使用:
Intent refresh =getIntent();
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
supportInvalidateOptionsMenu();
else
invalidateOptionsMenu();
//this.supportInvalidateOptionsMenu();
//finish();
startActivity(refresh);
finish();
问题仍然存在。
答案 0 :(得分:1)
你可以通过调用:-)
示例:
invalidateOptionsMenu();
** 编辑 **
On API&lt; 11使用 // whatever you want to do before you want to recreate action bar
activity.invalidateOptionsMenu();
方法
完整的解决方案将是这样的:
supportInvalidateOptionsMenu()
答案 1 :(得分:0)
重新创建活动后,尝试使用onCreate
方法设置操作栏标题,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
resetTitle();
}
...
private void resetTitle() {
try {
int label = getPackageManager().getActivityInfo(getComponentName(), GET_META_DATA).labelRes;
if (label != 0) {
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle(getString(label));
} else {
setTitle(label);
}
}
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Reset title problem", e);
}
}
顺便说一句,您也可以使用recreate
方法来重新创建活动。它是在API级别11中添加的。