放置onSharedPreferenceChangeListener的最佳位置

时间:2012-05-29 22:01:16

标签: android sharedpreferences

我正在尝试为我的应用添加设置。我添加了新设置,但我不确定将OnSharedPreferenceChangeListener放在哪里。我把它放在活动中并添加了Log.d(),但Log.d()从未被触发。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

根据Android Settings doc的最佳位置是:

@Override
protected void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
}

你应该将监听器存储在一个字段变量中(或者使用Activity对象本身 - 如上面的源代码所示),这样它就不会被垃圾收集。

即。匿名类对象不能用作OnSharedPreferenceChangeListener

答案 1 :(得分:0)

您需要通过调用setOnPreferenceChangeListener来注册您的侦听器。我将假设您有一个扩展PreferenceActivity的Activity类。如果是这样,这是听众的最佳场所。你会写这样的东西:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);

    Preference myPreference = findPreference("my_pref");
    myPreference.setOnPreferenceChangeListener(this);
}
相关问题