android - 偏好选择始终保持默认

标签 android preferenceactivity

我有一个小问题,每次我尝试更改程序中的首选项时,它们在 Activity 中都不会改变,它们只是保持默认值。

public class Reciever extends BroadcastReceiver {
boolean smsOn = false;
    String smsColor = new String ("Green");
    Uri smsSound;
    String smsVibrate = new String ("Normal");

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(arg0);

     smsOn = pref.getBoolean(Preferences."PREF_SMS_ON", false);
     smsColor = pref.getString(Preferences.SMS_PREF_COLOR, "Green");
     smsSound = Uri.parse(pref.getString(Preferences.SMS_PREF_SOUND, "Silent"));
     smsVibrate = pref.getString(Preferences.SMS_PREF_SOUND, "Normal");

             //all variable remain default value verified through debugger

       NotificationManager mNotificationManager = (NotificationManager) arg0.getSystemService(Context.NOTIFICATION_SERVICE);
        if (arg1.getAction().equals(ACTION)){
            if(smsOn == true){....... if checkbox is checked  smsOn still remains false 
}

prefenceactivity类

public class Preferences extends PreferenceActivity implements OnPreferenceClickListener{
public static final String PREF_SMS_ON = "PREF_SMS_ON";
public static final String VIBRATE_ON_CALL1 = "VIBRATE_ON_CALL1";
public static final String SMS_PREF_COLOR = "SMS_PREF_COLOR";
public static final String SMS_PREF_SOUND = "SMS_PREF_SOUND";
public static final String SMS_PREF_VIB = "SMS_PREF_VIB";
}

xml文件(我就复制一个)

    <CheckBoxPreference 
        android:key="PREF_SMS_ON"
        android:title="SMS Notifications"
        android:summary="Turn On SMS Notifications"
        android:defaultValue="false">
    </CheckBoxPreference>  

我不明白它出了什么问题,这一切看起来对我来说应该有用

最佳答案

嗯,您的代码中存在一些问题。 这tutorial有利于创建偏好。 此外,如果您想更改 PreferenceActivity 之外的首选项,您应该使用编辑器 例如:

Editor e = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
e.putBoolean(Preferences."PREF_SMS_ON", true);
e.commit();

希望对你有帮助

回复您的评论

好吧,问题是您正在使用 PreferenceActivity,如 here 中的文档所示它用于显示偏好的视觉风格。此外,如所示 here ,“当用户与之交互时,首选项将自动保存到 SharedPreferences”。它给我的印象是您想在 PreferenceActivity 之外更改首选项(这没有错),但您说那不是您想要做的。

但是,我确实注意到您的 PreferenceActivity 没有从您的资源文件中加载首选项,为此您需要添加 addPreferencesFromResource(R.xml.settings);例如,在您的 onCreate 中。但是,正如我所说,只有当用户直接与此 Activity 交互时,您的偏好才会自动更改。 希望对您有所帮助。

关于android - 偏好选择始终保持默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973395/

相关文章:

android - 当想要选择时,在 android Sqlite 中获取错误 Index 0 requests, with a size of 0

android - 来自 PreferenceManager 的 SharedPreference 默认值与工作 OnSharedPreferenceChangeListener

android - PreferenceActivity 可以自定义它处理触摸的方式吗?

android - android.widget.ArrayAdapter.createViewFromResource 中的 NullPointerException

java - android java中两个函数之间的 sleep ?

android - Fabric 不接受 @string/... 对其在 manifest.xml 中的 API key 的引用

java - 如何为文件分配只读权限

android - 将 PreferenceFragment 与多个首选项文件重用

android - 更新应用程序后 PreferenceScreen 不显示摘要

java - Android:xml 组件中的动态值?