Android studio Android Studio OnSharedPreferenceChangedListener在MainActivity中不工作
我有一个每日警报和一个设置页面,允许用户更改每日警报触发的时间。我的SettingsFragmentsFragmentCompat中有一个OnSharedPreferenceChangeListener扩展了PreferenceFragmentCompat,它在这里工作。然而,当我在我的主要活动中做同样的事情时,它似乎不起作用 这是我在主要活动中的代码: ''' ''' 这是我的暂停和恢复: ''' ''' 当我启动应用程序并检查我的System.out时,“System.out.println(“onsharedpreferencechange Activated”);”似乎没有启动,这意味着我的OnSharedPreferenceChangeListener无法工作。我似乎在讨论其他问题,但这似乎不是解决我问题的办法 当我启动应用程序并检查我的System.out时,“System.out.println(“onsharedpreferencechange Activated”);”似乎没有启动,这意味着我的OnSharedPreferenceChangeListener无法工作 这是因为您总是在Android studio Android Studio OnSharedPreferenceChangedListener在MainActivity中不工作,android-studio,listener,Android Studio,Listener,我有一个每日警报和一个设置页面,允许用户更改每日警报触发的时间。我的SettingsFragmentsFragmentCompat中有一个OnSharedPreferenceChangeListener扩展了PreferenceFragmentCompat,它在这里工作。然而,当我在我的主要活动中做同样的事情时,它似乎不起作用 这是我在主要活动中的代码: ''' ''' 这是我的暂停和恢复: ''' ''' 当我启动应用程序并检查我的System.out时,“System.out.println
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);
}