每当用户更改应用程序语言时,我都会使用此代码重新创建活动:
public class MyActivity extends Activity implements OnSharedPreferenceChangeListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("language"))
recreate();
}
}
这段代码适用于任何没有片段的活动。但是,如果我的活动包含一个或多个片段,则在从Fatal Signal 11 (SIGSEGV)
返回并且在onSharedPreferenceChanged()
第二次调用之前,会立即抛出onCreate()
。谁能告诉我我做错了什么?
我目前正在OSX Mavericks上使用ADT build v 22.6.2 - 1085508针对SDK版本19进行编译。
答案 0 :(得分:2)
您必须在onPause或onStop中取消注册您的侦听器:
@Override
protected void onStop() {
super.onStop();
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
}