2011-09-28 138 views
4

我在我的應用程序中有一個鈴聲首選項,但是當我選擇我想要的鈴聲時,它不會存儲在首選項值中。我可以再次點擊該偏好設置,它不會顯示我剛剛選擇的內容。鈴聲首選項不保存選擇

這裏是XML

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<PreferenceCategory android:title="Audio Settings"> 
     <CheckBoxPreference 
      android:key="SMS_PREF_TTS" 
      android:title="Say name of sender" 
      android:summary="When a person in your contact list sends you a sms/mms message its says their name" 
      android:defaultValue="false"> 
     </CheckBoxPreference> 
     <CheckBoxPreference 
      android:key="SMS_PREF_TTS_MSG" 
      android:title="Say Message" 
      android:summary="Will say the message of sender from contact list" 
      android:dependency="SMS_PREF_TTS" 
      android:defaultValue="false"> 
     </CheckBoxPreference> 
     <RingtonePreference 
      android:key="SMS_PREF_SOUND" 
      android:title="Change Sound" 
      android:ringtoneType="notification" 
      android:summary="Select the notification Sound" 
      android:dialogTitle="Change Sound" 
      android:defaultValue="Silent"> 
     </RingtonePreference> 
</PreferenceCategory> 
</PreferenceScreen> 

和奇怪的是我剛寫的另一個XML我的應用程序的其他部分與鈴聲偏好看同樣的方式和一個作品,所以我不明白。

這裏是工作的一個

<RingtonePreference 
     android:key="CAL_PREF_TONE" 
     android:title="Default ringtone" 
     android:summary="Select default notification ringtone" 
     android:ringtoneType="notification" 
     android:defaultValue="Silent" 
     android:dependency="CAL_PREF_ON"> 
    </RingtonePreference> 
+0

我能想到的唯一的事情就是你在其他一些pref中使用了SMS_PREF_SOUND,並且這會覆蓋你的選擇。除此之外(除非你在PreferenceActivity中做某件事),絕對沒有理由不存儲它。 – IncrediApp

+0

我也嘗試過改變'鑰匙',它仍然不能保存它 – tyczj

回答

2

我最終通過註冊onPreferenceClickListener並得到結果手動保存它

0

我有同樣的問題,但後來我檢討我的代碼,當我讀到的偏好:

SharedPreferences settings = 
context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 

哪項是錯誤的,正確的解決方案是:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

希望它有助於

3

我有同樣的問題。在AndroidManifest.xml文件中,我的偏好設置爲noHistory="true"。一旦我刪除它,一切工作正常。

2

我設法解決此除去從AndroidManifest.xml中設置活動入口android:launchMode="singleInstance"android:excludeFromRecents="true"(設置一個或兩個的這些選項將導致相同的問題)。這似乎是Android上的一個錯誤。

1

我使用的是由烏提供的解決方案舉行,我只是想補充一點,我不得不刪除launchMode="singleInstance",現在我使用android:launchMode="singleTask",一切工作正常。以防萬一別人需要launchMode,這個爲我工作。