从PreferenceFragment更改时,将新的Locale应用于应用程序

时间:2014-09-23 09:21:24

标签: android android-fragments preferenceactivity

我的偏好设置是通过PreferenceActivity设置的,onBuildHeaders()PreferenceFragments xml资源加载<preference-headers>

其中一个片段包含ListPreference语言。

OnSharedPreferenceChangeListener已正确(未)注册,并且onSharedPreferenceChanged()已正确调用。调用onSharedPreferenceChanged()时,首先我更新默认语言环境:

    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    mContext.getResources().updateConfiguration(config, mContext.getResources().getDisplayMetrics());

然后我更新了这个片段的首选项和首选项摘要(正确地从新设置的语言环境中提取字符串)。

返回onResume中的PreferenceActivity

@Override
protected void onResume() {
    super.onResume();
    invalidateHeaders();
}

强制首选项片段在新设置的语言环境中正确显示其标题。

一切都很好,但让我感到困扰的是:

  • PreferenceFragment标题未更改
  • PreferenceActivity标题未更改
  • MainActivity的所有文本保持不变(直到通过例如屏幕旋转重新创建活动)

我该如何解决?

(minSdkVersion为15)

1 个答案:

答案 0 :(得分:1)

自己解决了。以下是所有方面......

1)PreferenceFragment标题未更改

更新PreferenceFragment中的标题和摘要时,还会更新PreferenceActivity标题(实际上为PreferenceFragment提供标题):

getActivity().setTitle(getString(R.string.title_activity_settings));

2)PreferenceActivity标题未更改

onResume()的{​​{1}}中,更新其标题:

PreferenceActivity

3)MainActivity的所有文本保持不变

跟踪MainActivity的setTitle(getString(R.string.title_activity_settings)); 中的区域设置(String),并将其与onCreate()中的当前区域设置(String)进行比较。如果不同,请使用以下命令重新启动活动:

onResume()