Java onSharedPreferenceChanged未更新首选项

Java onSharedPreferenceChanged未更新首选项,java,android,preferences,Java,Android,Preferences,因此,当首选项更改时,我尝试更新timers.java类中的值。下面是my timers.java中的值 final boolean soundEnabledPref = sharedPref.getBoolean(spawnTimers.KEY_PREF_SOUND, false); 我在onCreate中调用了它,如果我更改了一个首选项,请返回2个屏幕到main.java,然后重新启动timers.java,更改将起作用,但是如果我只进入首选项,然后返回timers.java,更改将不会生

因此,当首选项更改时,我尝试更新timers.java类中的值。下面是my timers.java中的值

final boolean soundEnabledPref = sharedPref.getBoolean(spawnTimers.KEY_PREF_SOUND, false);
我在onCreate中调用了它,如果我更改了一个首选项,请返回2个屏幕到main.java,然后重新启动timers.java,更改将起作用,但是如果我只进入首选项,然后返回timers.java,更改将不会生效

这是我的设置fragment.java

import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.PreferenceFragment;

public class settingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

    public static final String KEY_PREF_SOUND_SETTINGS = "pref_key_sounds_settings";

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

        addPreferencesFromResource(R.xml.preferences);

        onSharedPreferenceChanged(null, "");
    }

    @Override
    public void onResume() {
        super.onResume();
        // Set up a listener whenever a key changes
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();
        // Unregister the listener whenever a key changes
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
    {

        if (key.equals(KEY_PREF_SOUND_SETTINGS))
        {
            boolean soundEnabledPref = sharedPreferences.getBoolean(spawnTimers.KEY_PREF_SPAWNSOUND, false);
        }
    }



}
我猜我在onSharedPreferenceChanged中的内容不正确?我不确定我需要在If语句中输入什么才能将布尔值的更改返回到timers.java

final boolean soundEnabledPref = sharedPref.getBoolean(spawnTimers.KEY_PREF_SOUND, false);
任何帮助都将不胜感激

谢谢

编辑:有人发布了一个解决问题的答案

我已将我的共享偏好更改为

@Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
    {

        if (key.equals(KEY_PREF_SPAWN_SOUNDS))
        {
            CheckBoxPreference soundEnabledPref = (CheckBoxPreference)findPreference(KEY_PREF_SOUND_SETTINGS);
            soundEnabledPref.setChecked(sharedPreferences.getBoolean(spawnTimers.KEY_PREF_SPAWNSOUND, false));
        }
    }
现在,它更新了值,并且正在工作,但是,每当我选中或取消选中该框时,它都会抛出一个错误

01-24 13:35:36.558: E/AndroidRuntime(3681): FATAL EXCEPTION: main
01-24 13:35:36.558: E/AndroidRuntime(3681): Process: com.rcd.helper, PID: 3681
01-24 13:35:36.558: E/AndroidRuntime(3681): java.lang.ClassCastException: android.preference.PreferenceCategory cannot be cast to android.preference.CheckBoxPreference
01-24 13:35:36.558: E/AndroidRuntime(3681):     at com.rcd.helper.settingsFragment.onSharedPreferenceChanged(settingsFragment.java:43)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:475)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:385)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.preference.Preference.tryCommit(Preference.java:1372)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.preference.Preference.persistBoolean(Preference.java:1638)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.preference.TwoStatePreference.setChecked(TwoStatePreference.java:84)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.preference.TwoStatePreference.onClick(TwoStatePreference.java:70)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.preference.Preference.performClick(Preference.java:952)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.preference.PreferenceScreen.onItemClick(PreferenceScreen.java:215)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.widget.AdapterView.performItemClick(AdapterView.java:299)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.widget.AbsListView$3.run(AbsListView.java:3638)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.os.Handler.handleCallback(Handler.java:733)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.os.Looper.loop(Looper.java:137)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at android.app.ActivityThread.main(ActivityThread.java:5083)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at java.lang.reflect.Method.invoke(Method.java:515)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
01-24 13:35:36.558: E/AndroidRuntime(3681):     at dalvik.system.NativeStart.main(Native Method)

为什么要手动调用共享首选项更改上的
并将其作为参数传递为null和空字符串


删除
onSharedPreferenceChanged(null,“”)来自您的代码。

键是否相同<代码>产卵计时器。键预产卵声音
产卵计时器。键预产卵声音
?不,它们不是。KEY\u PREF\u SOUND是首选项类别键,KEY\u PREF\u SOUND是CheckBoxPreference键您确定
KEY\u PREF\u SOUND\u SETTINGS
是CheckBoxPreference吗?不是。实际上,我把它改成了KEY_PREF_SPAWN_SOUNDS(这是复选框的键),这样错误就消失了,但是我又回到了,我的计时器中的布尔值没有改变。java我猜它以前改变的原因是由于软崩溃。出于某种原因,只有在首选项中改变它,它才会改变,返回2个屏幕到main.java并重新启动timers.java,这是我试图修复的教程中添加的。。我删除了它,但实际上它并没有做任何事情(据我所知),有人之前发布了一个“答案”,我实现了这个答案,它工作了一半。会在上面发布更新吗?还有其他想法吗?我能够通过public void onSharedPreferenceChanged(SharedPreferences SharedPreferences,String键)中的If语句,并且onPause和onResume都启动,因此,无论我在onSharedPreferencesChanged中得到了什么,实际上并没有改变存储在timers.java中的首选项值。我是否需要在其中添加一个意图,以便将该值传递回timers.java?