【发布时间】:2013-11-02 21:37:53
【问题描述】:
在我的首选项屏幕中,我将听众设置为onCreate() 上的一些首选项。
但我注意到每次加载首选项时都会调用监听器(可能在 onCreate() 上)。
有没有办法防止这种情况发生?
我当然希望仅在给定键中的首选项值更改时才调用侦听器。
谢谢
【问题讨论】:
-
你当前的代码是什么?
标签: android android-preferences changelistener
在我的首选项屏幕中,我将听众设置为onCreate() 上的一些首选项。
但我注意到每次加载首选项时都会调用监听器(可能在 onCreate() 上)。
有没有办法防止这种情况发生?
我当然希望仅在给定键中的首选项值更改时才调用侦听器。
谢谢
【问题讨论】:
标签: android android-preferences changelistener
您可以通过这种方式实现。您需要在onResume 注册您的听众并在onPause 取消注册。这样,当您的活动被创建时,它就不会被调用,因为首选项值的初始更改已经发生。
public class SettingsActivity extends PreferenceActivity
implements OnSharedPreferenceChangeListener {
@Override
protected void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// Let's do something a preference value changes
}
}
【讨论】:
即使更改以编程方式发生,更改侦听器也会触发,而不仅仅是由于用户输入(因为用户输入最终会导致 vaue 以编程方式更改,因此不会产生差异)。
解决方案是在创建视图并使用当前设置的首选项填充视图之后添加侦听器,而不是在onCreate 中添加它们。
【讨论】: