在Android中将侦听器分配给首选项时,将调用setOnPreferenceChangeListener

时间:2013-11-02 21:37:53

标签: android android-preferences changelistener

在我的偏好设置屏幕中,我将听众设置为onCreate()上的某些偏好设置 但是我注意到每次加载首选项时都会调用侦听器(可能在onCreate()上)。
有没有办法防止这种情况发生? 我当然希望只有当给定键中的首选项值发生变化时才会调用侦听器。

由于

2 个答案:

答案 0 :(得分:1)

即使在以编程方式发生更改时也会更改侦听器,而不仅仅是因为用户输入(因为用户输入最终导致vaue中的程序更改,因此无法区分)。

解决方案是在创建视图后添加侦听器,并使用当前设置的首选项填充,而不是在onCreate中添加它们。

答案 1 :(得分:1)

你可以这样做。您需要在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
    }

}