Reputation: 1152
So I am trying to update values in my timers.java class when a preference is changed. Here is the value in my timers.java
final boolean soundEnabledPref = sharedPref.getBoolean(spawnTimers.KEY_PREF_SOUND, false);
I have called that in the onCreate and if I change a preference, go back 2 screens to main.java and then relaunch timers.java the change will work, however if i just go into preferences and then back out to timers.java the change does not take effect
Here is my settingsFragment.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);
}
}
}
im guessing what i have in onSharedPreferenceChanged is not correct? Not really sure what i need to put into the If statement to get the value change of the boolean back to timers.java
any help would be greatly appreciated!
Thanks!
EDIT: someone posted an answer which sort of fixed the problem
I have changed my onSharedPreferencesChanged to
@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));
}
}
This now updates the value and it is working, however, whenever i check or uncheck the box, it is throwing an error
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)
Upvotes: 0
Views: 1015
Reputation: 9326
Why are you calling onSharedPreferenceChanged
manually and passing it null and empty String as arguements?
Remove onSharedPreferenceChanged(null, "");
from your code.
Upvotes: 1