Android studio Android Studio OnSharedPreferenceChangedListener在MainActivity中不工作

Android studio Android Studio OnSharedPreferenceChangedListener在MainActivity中不工作,android-studio,listener,Android Studio,Listener,我有一个每日警报和一个设置页面,允许用户更改每日警报触发的时间。我的SettingsFragmentsFragmentCompat中有一个OnSharedPreferenceChangeListener扩展了PreferenceFragmentCompat,它在这里工作。然而,当我在我的主要活动中做同样的事情时,它似乎不起作用 这是我在主要活动中的代码: ''' ''' 这是我的暂停和恢复: ''' ''' 当我启动应用程序并检查我的System.out时,“System.out.println

我有一个每日警报和一个设置页面,允许用户更改每日警报触发的时间。我的SettingsFragmentsFragmentCompat中有一个OnSharedPreferenceChangeListener扩展了PreferenceFragmentCompat,它在这里工作。然而,当我在我的主要活动中做同样的事情时,它似乎不起作用

这是我在主要活动中的代码: '''

'''

这是我的暂停和恢复: '''

'''

当我启动应用程序并检查我的System.out时,“System.out.println(“onsharedpreferencechange Activated”);”似乎没有启动,这意味着我的OnSharedPreferenceChangeListener无法工作。我似乎在讨论其他问题,但这似乎不是解决我问题的办法

当我启动应用程序并检查我的System.out时,“System.out.println(“onsharedpreferencechange Activated”);”似乎没有启动,这意味着我的OnSharedPreferenceChangeListener无法工作

这是因为您总是在
onPause()
中注销侦听器。因此,每当您离开活动时,侦听器都会被删除,您无法侦听
SharedReferences
更改

您可以在
onCreate()
方法中注册侦听器

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // setup the listener
    preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    ...

    // then register it
    PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(preferenceChangeListener);

}
然后在关闭活动时,通过覆盖
ondestory()
方法注销侦听器:

@Override
public void onDestroy() {
  PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);

  super.onDestroy();
}
或者在调用
finish()
方法时取消注册侦听器。在
finish()
之前调用注销部分,或者重写
finish()
方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // setup the listener
    preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    ...

    // then register it
    PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(preferenceChangeListener);

}
当我启动应用程序并检查我的System.out时,“System.out.println(“onsharedpreferencechange Activated”);”似乎没有启动,这意味着我的OnSharedPreferenceChangeListener无法工作

这是因为您总是在
onPause()
中注销侦听器。因此,每当您离开活动时,侦听器都会被删除,您无法侦听
SharedReferences
更改

您可以在
onCreate()
方法中注册侦听器

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // setup the listener
    preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    ...

    // then register it
    PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(preferenceChangeListener);

}
然后在关闭活动时,通过覆盖
ondestory()
方法注销侦听器:

@Override
public void onDestroy() {
  PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);

  super.onDestroy();
}

或者在调用
finish()
方法时取消注册侦听器。在
finish()
之前调用取消注册部分,或者重写
finish()
方法。

您是否只尝试在
onCreate()
中注册侦听器并对取消注册部分进行注释?天哪,这很有效。我真是个傻瓜。每次我更改SharedReferences时,它都会被注销,因为我将处于“设置”活动中。非常感谢xDD,您知道如果我不注销它,它会以任何方式影响性能吗?很好,它可以工作!如果您没有注销侦听器,它将继续侦听更改。每当我调用
finish()
时,我通常会在
onDestroy
中注销它。那么让我来创建一个答案来结束这个问题。您是否只尝试在
onCreate()
中注册侦听器并对取消注册的部分进行注释?天哪,这很有效。我真是个傻瓜。每次我更改SharedReferences时,它都会被注销,因为我将处于“设置”活动中。非常感谢xDD,您知道如果我不注销它,它会以任何方式影响性能吗?很好,它可以工作!如果您没有注销侦听器,它将继续侦听更改。每当我调用
finish()
时,我通常会在
onDestroy
中注销它。那么,让我创建一个答案来结束这个问题。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // setup the listener
    preferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
    ...

    // then register it
    PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(preferenceChangeListener);

}