Action Bar不会在Activity重新创建Android上重新创建

时间:2015-05-30 10:51:53

标签: android android-activity android-actionbar locale

我正在根据用户输入更改应用程序的语言。  在此之后,我必须重新创建活动以使更改可见。我到现在为止尝试了两种方法:

  1. 第一种方法:

              Intent refresh = getIntent();
              finish();
              startActivity(refresh);
    
  2. 但事实是,虽然活动加载了新的语言字符串,但操作栏标题仍保留在以前的语言中。如果我关闭应用程序并再次加载屏幕一切都很好。 所以我认为我可能做错了什么并将代码更改为:

    1. 第二种方法:

      Intent refresh = new Intent(this, FirstActivity.Class);
      refresh.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(refresh);
      finish();
      

      请参阅Reference

    2. 这会导致应用程序崩溃。任何见解都会非常有用。

      注意: 我正在使用app.support.v7.app.ActionBarActivity

      问题ScreenShot: Action bar Title not recreated

      修改

      我也尝试过:

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

      问题仍然存在。

2 个答案:

答案 0 :(得分:1)

你可以通过调用:-)

让android自动重新创建操作栏

示例:

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中添加的。