Android OnSharedPreferenceChangeListener回调从未执行

Android OnSharedPreferenceChangeListener回调从未执行,android,sharedpreferences,android-preferences,Android,Sharedpreferences,Android Preferences,我的主要活动是启动新活动(SearchResultsActivity)。 我还有一个设置菜单 我希望每当设置菜单中有新的/编辑的设置时,都会通知我的SearchResultsActivity 我正在实现OnSharedPreferenceChangeListener上的SearchResultsActivity接口,并注册自己以侦听设置中的任何修改,但由于某些奇怪的原因,回调从未执行 这是我的SearchResultsActivitycode public class SearchResults

我的主要活动是启动新活动(
SearchResultsActivity
)。 我还有一个设置菜单

我希望每当设置菜单中有新的/编辑的设置时,都会通知我的
SearchResultsActivity

我正在实现
OnSharedPreferenceChangeListener
上的
SearchResultsActivity
接口,并注册自己以侦听设置中的任何修改,但由于某些奇怪的原因,回调从未执行

这是我的
SearchResultsActivity
code

public class SearchResultsActivity extends BaseActivity implements SearchResultsFragment.RouteResultsFragmentCommunicator, SharedPreferences.OnSharedPreferenceChangeListener {

    private static final String TAG = SearchResultsActivity.class.getSimpleName();

    private FragmentManager mFragmentManager;
    private SearchResultsFragment mSearchResultsFragment;
    private RouteFragment mRouteFragment;
    private SharedPreferences pref;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_search_results);

        // Set the toolbar
        activateToolbarWithHomeEnabled();

        pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        // Initialize the FragmentManager
        mFragmentManager = getFragmentManager();

        mSearchResultsFragment = (SearchResultsFragment) mFragmentManager.findFragmentById(R.id.searchRouteResultsFragment);
    }


    @Override
    protected void onResume() {
        super.onResume();

        pref.registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onStop() {
        EventBus.getDefault().unregister(this);

        super.onStop();
    }

    @Override
    protected void onPause() {
        pref.unregisterOnSharedPreferenceChangeListener(this);
        super.onPause();
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        Log.d(TAG, "onSharedPreferenceChanged callback");
    }

}
为了简单起见,我删除了与我的问题无关的部分代码

所以我的问题是,当我更改任何设置时,“onSharedPreferenceChanged回调”永远不会打印在logcat上

以防万一,下面是我的设置实现:

public class MySettings extends BaseActivity {

    private static final String TAG = MySettings.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pref_with_actionbar);

        // Set the toolbar
        activateToolbarWithHomeEnabled();

        getFragmentManager().beginTransaction().replace(R.id.content_frame, new MyPreferenceFragment()).commit();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id==android.R.id.home) {
            finish();
            return true;
        }
        else {
            return super.onOptionsItemSelected(item);
        }
    }
}
片段:

public class MyPreferenceFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

    private static final String TAG = MyPreferenceFragment.class.getSimpleName();

    private EditTextPreference mMaxRadius;
    private SharedPreferences mSharedPreferences;
    private CheckBoxPreference mCheckBoxPreference;

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        mMaxRadius = (EditTextPreference) findPreference(getResources().getString(R.string.pref_radius_key));

        mSharedPreferences = getPreferenceManager().getSharedPreferences();
        String maxRadius = mSharedPreferences.getString(getResources().getString(R.string.pref_radius_key), "Unknown");
        mMaxRadius.setSummary("Max Radius: " + maxRadius);

        mCheckBoxPreference = (CheckBoxPreference) findPreference(getString(R.string.pref_order_list_key));
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equalsIgnoreCase(getResources().getString(R.string.pref_radius_key))) {
            Preference connectionPref = findPreference(key);
            // Set summary to be the user-description for the selected value
            connectionPref.setSummary(sharedPreferences.getString(key, "Unknown") + " km");
        }
        else if (key.equalsIgnoreCase(getString(R.string.pref_order_list_key))) {
            Preference orderByPreference = findPreference(key);
        }
    }


    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }
}
请注意,在
MyPreferenceFragment
上,会按预期调用
onSharedPreferenceChanged
,每当设置发生更改时,就会执行
MyPreferenceFragment\onSharedPreferenceChanged
。但是,
SearchResultsActivity\onSharedPreferenceChanged
从未被调用


有人能解释一下当我更改设置时,
SearchResultsActivity\onSharedPreferenceChanged
从未被执行有什么问题吗?

onCreate()
中注册您的侦听器,并在
onDestroy()
中取消注册。当您启动首选项活动时,您的主要活动将暂停并取消注册。

哦,我犯了一个愚蠢的错误。我想是时候休息一下了。谢谢你的帮助和时间。