【问题标题】:setOnPreferenceChangeListener is called when assigning listener to preference in Android在 Android 中将侦听器分配给首选项时调用 setOnPreferenceChangeListener
【发布时间】:2013-11-02 21:37:53
【问题描述】:

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

谢谢

【问题讨论】:

  • 你当前的代码是什么?

标签: android android-preferences changelistener


【解决方案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
    }

}

【讨论】:

  • 工作得很好。谢谢
【解决方案2】:

即使更改以编程方式发生,更改侦听器也会触发,而不仅仅是由于用户输入(因为用户输入最终会导致 vaue 以编程方式更改,因此不会产生差异)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多