11

チェックボックス設定の値を取得したい。好みを聞くのに適した方法はどれですか?

OnPreferenceChangeListener と OnSharedPreferenceChangeListener の本当の違いは何ですか?!

更新 onSharedPreferenceChanged が呼び出されないのはなぜですか?

public class Setting extends PreferenceActivity implements
        OnSharedPreferenceChangeListener // ,OnPreferenceChangeListener
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);// deprecated warning
    }

    @Override
    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {// DO Stuff
    }

    @Override
    protected void onResume() {
        super.onResume();
        // getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
        // PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
        this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
                .registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        // getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
        // PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
        this.getSharedPreferences("myPrefDB", MODE_PRIVATE)
                .unregisterOnSharedPreferenceChangeListener(this);
    }
}
4

1 に答える 1

14

これら2つの違いは、設定が変更されたときにのみOnPreferenceChangeListener呼び出されるコールバック(単一のキーに適用される)であるのに対し、そのオブジェクトの設定のいずれかが変更されるたびに呼び出されるコールバック(すべてのキーに適用される)です。OnSharedPreferenceChangeSharedPreferences

したがって、あなたの場合、あなたはあなたのでを使用する必要がありOnPreferenceChangeListenerますCheckBoxPreference

次に例を示します。

Preference ckboxPref = this.findPreference(CKBOX_PREF_KEY);
ckboxPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

    @Override
    public boolean onPreferenceChange(Preference preference,
            Object newValue) {
        //Do stuff
    }
});

フラグメントを使用する場合、このメソッドfindPreferenceは機能しませんが、フラグメントを使用していないため、問題ありません。

于 2012-11-10T11:43:50.270 に答える