简体   繁体   English

聆听偏好变更

[英]Listen to preference changes

In my Main activity I would like to listen to changes made in the Preferences Activity. 在我的主要活动中,我想听听在“首选项”活动中所做的更改。 I use 我用

    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);

But the listener is never called. 但是永远不会调用监听器。 In my SettingsActivity I use the generated code from the Android Studio Template. 在我的SettingsActivity中,我使用了Android Studio模板生成的代码。 For instance 例如

@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);
    }
}

How to fix this? 如何解决这个问题?

You need to hold onto a reference of your listener in your SettingsActivity. 您需要在SettingsActivity中保留侦听器的引用。 SharedPreferences only holds onto a Weak Reference, which means your listener doesn't get called. SharedPreferences仅保留弱引用,这意味着不会调用您的侦听器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM