Android registerOnSharedPreferenceChangeListener()会导致自定义视图崩溃

unk*_*one 7 crash android android-custom-view android-preferences sharedpreferences

每当我尝试添加此行时,它都会崩溃我的应用.我不把它放在正确的位置吗?

    preferences.registerOnSharedPreferenceChangeListener(myActivity.this);
Run Code Online (Sandbox Code Playgroud)

这是我的课

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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ras*_*sel 16

这样做

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

preferences.registerOnSharedPreferenceChangeListener(prefListener);
Run Code Online (Sandbox Code Playgroud)


jt-*_*son 13

关于Answer的一个注意事项,prefListener需要是一个类字段,而不是一个局部变量,否则它可能会被垃圾收集.

SharedPreferences.onSharedPreferenceChangeListener未被一致地调用