铃声偏好不保存选择

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>

我能想到的唯一可能是你在其他首选项中使用了SMS_PREF_SOUND,这会覆盖你的选择。除此之外(除非你在PreferenceActivity中做了什么),它绝对会被存储。 - IncrediApp
我已经尝试更改“key”,但仍无法保存它。 - tyczj
6个回答

4

就是这样了!谢谢你! - Martin Pfeffer

3

我曾经遇到过同样的问题。在AndroidManifest.xml文件中,我的偏好设置活动被设置为noHistory="true"。一旦我将其删除,一切正常工作。


2

我最终通过注册一个onPreferenceClickListener并获取结果来手动保存它。


2

我通过从AndroidManifest.xml中的设置活动条目中移除android:launchMode="singleInstance"android:excludeFromRecents="true"来解决了这个问题(设置这两个选项中的任何一个都会导致相同的问题)。这似乎是Android上的一个错误。


1
我使用的解决方案是由Udo Held提供的,我只想补充一点,我不得不删除launchMode="singleInstance",现在我正在使用android:launchMode="singleTask",一切正常。以防万一有人需要一个launchMode,这个对我很有效。

0

我刚遇到了同样的问题,但是当我查看偏好设置时,我重新审查了我的代码:

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

哪个是错误的,正确的解决方案是:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);

希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接