【发布时间】:2014-09-30 08:38:34
【问题描述】:
在我的应用偏好中,我可以选择更改应用的语言。
public class Fragment_Preferences extends PreferenceFragment {
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
SharedPreferences preferences;
@Override
public void onCreate(Bundle savedInstanceState) {
preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(key.equals("language_preference"))
{
// Set language change flag to true -
// the Main Fragment will be recreate when this fragment finishes and the main restarts
Common_Methods.set_locale_changed(true);
}
}
};
prefs.registerOnSharedPreferenceChangeListener(prefListener);
}
}
因此,当我更改语言时,首选项片段不会立即更改其语言。我必须退出首选项,然后在我的片段或活动中(取决于我从哪里调用首选项片段)我有这段代码,它使用新的语言设置重新启动当前片段或活动:
public void onConfigurationChanged(Configuration newConfig) {
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
{
finish();
startActivity(getIntent());
} else {recreate();}
}
}, 1);
Common_Methods.set_locale_changed(false); // Reset the Language change flag to prevent repeating Fragment recreation.
super.onConfigurationChanged(newConfig);
}
如果我此时重新打开偏好片段 - 它将使用新选择的语言。
我尝试将上述方法复制到我的 Preference_Fragment,但出现错误。所以问题是:如何在选择新语言后立即用新语言重新创建/重新加载 Preference_Fragment,而不必先退出片段?
【问题讨论】:
标签: android sharedpreferences android-preferences