6

私はこのようなことができることを知っています:

Preference pref = findPreference(getString(R.string.pref_vibrate_on_key));
pref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference,
                Object newValue) {
            LogUtil.d("Working!");
            return true;
        }

});

しかし、すべての設定にリスナーを追加したいと思います。私はやってみました:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {

        @Override
        public void onSharedPreferenceChanged(
                SharedPreferences sharedPreferences, String key) {
            LogUtil.d("working!");

        }

});

しかし、うまくいきません。これは可能ですか?もしそうなら、私は何を間違っていますか?

4

2 に答える 2

8

毎回同じリスナーを呼び出す必要があるとすると、これはより簡単な解決策になる可能性があります。

Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() {
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        // Code goes here            
        return true;
    }
};

EditTextPreference pref = (EditTextPreference)findPreference(getString(R.string.pref1));
pref1.setOnPreferenceChangeListener(changeListener);

EditTextPreference pref2 = (EditTextPreference)findPreference(getString(R.string.pref2));
pref2.setOnPreferenceChangeListener(changeListener);
于 2011-12-29T13:25:04.330 に答える
1

onSharedPrefererenceChangedプリファレンスの保存時 ( で BACK または HOME をクリックしたとき) に発火すると思いますPreferenceActivity。最も簡単な方法は、実装する単一のクラスを作成し、それOnPreferenceChangeListenerを切り替えて各設定ごとに設定することだと思います。Preference.getKey();OnPreferenceChangeListener

于 2010-02-10T16:22:25.550 に答える