8

この行を追加しようとすると、アプリがクラッシュします。私はそれを正しい場所に置いていませんか?

    preferences.registerOnSharedPreferenceChangeListener(myActivity.this);

これが私のクラスです

class Simulation extends View {

    // I declare my program variables here
    public Simulation(Context context) {
        super(context);
        // get the preferences
        SharedPreferences preferences = PreferenceManager
                .getDefaultSharedPreferences(context);
        preferences
                .registerOnSharedPreferenceChangeListener(myActivity.this);
        String storedPreference = preferences.getString("nPref", "0");
    }

    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {
        Log.i(TAG, "preferences changed!");
    }
}

ありがとう!

4

2 に答える 2

17

このようにしてください

SharedPreferences.OnSharedPreferenceChangeListener prefListener = 
        new SharedPreferences.OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(SharedPreferences prefs,
            String key) {
        if (key.equals("date")) {
        }
    }
};

preferences.registerOnSharedPreferenceChangeListener(prefListener);
于 2011-08-11T05:08:19.850 に答える
14

Answerに関する1つの注意点として、prefListenerはローカル変数ではなく、クラスフィールドである必要があります。そうしないと、ガベージコレクションが発生する可能性があります。

SharedPreferences.onSharedPreferenceChangeListenerが一貫して呼び出されていない

于 2012-02-29T01:24:06.267 に答える