听取偏好变化

时间:2015-11-21 19:36:23

标签: java android events android-studio sharedpreferences

在我的主要活动中,我想听取偏好活动中所做的更改。我用

    SharedPreferences prefs =
            PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    SharedPreferences.OnSharedPreferenceChangeListener listener =
            new SharedPreferences.OnSharedPreferenceChangeListener() {
        public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
            //implement here -> but this peace of code is never called
        }
    };
    prefs.registerOnSharedPreferenceChangeListener(listener);

但听众从未被召唤过。在我的SettingsActivity中,我使用Android Studio模板中生成的代码。例如

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_general);
        setHasOptionsMenu(true);
        bindPreferenceSummaryToValue(findPreference("my_list"));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            startActivity(new Intent(getActivity(), SettingsActivity.class));
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您需要在SettingsActivity中保留您的侦听器的引用。 SharedPreferences仅保留在弱引用上,这意味着您的侦听器不会被调用。