我有一个使用Android的SharedPreferences的应用。当我的ListPreference发生变化时,我正在使用OnSharedPreferenceChangeListener来执行某些操作。我在MainActivity的onStart()
方法中初始化我的OnSharedPreferenceChangeListener并注册它。我在onStop()
中取消注册。由于某种原因,它根本不起作用。如果我在活动的onCreate()
中注册它并且从不注销它似乎工作正常。为什么是这样?当我第一次启动Activity并尝试更改首选项时,甚至会发生这种情况,因此onStop()
永远不会被调用,并且侦听器永远不会被取消注册。相关代码如下:
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
private SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scoring);
// Initialize our game rules preference to its default value
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
setupViews(GameEngine.BAGS_PER_ROUND);
startNewGame();
}
@Override
protected void onStart() {
super.onStart();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("game_mode_list")) {
startNewGame();
Log.d(TAG, "ListPreference clicked");
}
}
};
prefs.registerOnSharedPreferenceChangeListener(prefListener);
}
@Override
protected void onStop() {
super.onStop();
// Unregister changeListener to prevent leaks (although Android uses a weak reference)
prefs.unregisterOnSharedPreferenceChangeListener(prefListener);
}
答案 0 :(得分:0)
getDefaultSharedPreferences()
将获取您应用的默认偏好设置文件。如果您正在尝试收听另一个文件中的更改(即,如果您的偏好设置在您自己命名的文件中),则应使用getSharedPreferences(String nameOfFile, int mode)