2014-01-24 66 views
0

所以我想更改我的timers.java類中的值時,首選項已更改。這裏是onSharedPreferenceChanged沒有更新首選項

final boolean soundEnabledPref = sharedPref.getBoolean(spawnTimers.KEY_PREF_SOUND, false); 

我所說的是在OnCreate,如果我改變的一個,回去2個屏幕我們向Main.java然後重新啓動timers.java的變化將工作在我timers.java值,但是如果我只是進入的喜好,然後回給timers.java更改不會生效

這裏是我的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); 
     } 
    } 



} 

即時猜測我有onSharedPreferenceChanged是不正確的?不太確定我需要把If語句放到if語句中以獲取布爾值的值更改爲timers.java

任何幫助將不勝感激!

謝謝!

編輯:有人張貼解答哪種類型的解決了這一問題

我已經改變了我onSharedPreferencesChanged到

@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) 
+1

是相同的關鍵。 'spawnTimers.KEY_PREF_SOUND'和'spawnTimers.KEY_PREF_SPAWNSOUND'? – Raghunandan

+0

不,他們不是。 KEY_PREF_SOUND是首選項類別鍵,KEY_PREF_SPAWNSOUND是CheckBoxPreference鍵 – Rob

+0

您確定'KEY_PREF_SOUND_SETTINGS'是一個checkboxPreference嗎? –

回答

1

你爲什麼要手動調用onSharedPreferenceChanged並將其傳遞空和空字符串作爲arguements?您的代碼中刪除onSharedPreferenceChanged(null, "");

+0

這是從我正在試圖獲得的教程添加它修復..我刪除它,但它實際上沒有做任何事情(據我所知)有人以前發佈了一個「答案」,我實施了它,一半工作。 將發佈更新以上 – Rob

+0

有沒有進一步的想法?我能夠通過public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key)中的If語句並且onPause和onResume都正在觸發,因此onSharedPreferencesChanged中的任何內容實際上都不會更改定時器中存儲的首選項值。 java – Rob

+0

爲了將值傳遞迴timers.java,我需要在那裏添加一個意圖嗎? – Rob