Android 首选项选择始终保持默认状态

Android 首选项选择始终保持默认状态,android,preferenceactivity,Android,Preferenceactivity,我遇到了一个小问题,每次我尝试更改程序中的首选项时,它们在活动中从未更改,只是停留在默认值 public class Reciever extends BroadcastReceiver { boolean smsOn = false; String smsColor = new String ("Green"); Uri smsSound; String smsVibrate = new String ("Normal"); SharedPreferences

我遇到了一个小问题,每次我尝试更改程序中的首选项时,它们在活动中从未更改,只是停留在默认值

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 
}
预习活动课

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文件(我只复制一个)



我不明白它到底出了什么问题,对我来说,它应该是可行的。嗯,你的代码中有一些问题。 这有利于创建首选项。 此外,如果要在
首选项活动
之外更改首选项,则应使用编辑器 例如:

Editor e = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
e.putBoolean(Preferences."PREF_SMS_ON", true);
e.commit();
我希望有帮助

对你的评论的答复 好的,问题是您使用的是
PreferenceActivity
,正如文档所示,它用于显示首选项的视觉样式。此外,如图所示,“当用户与首选项交互时,首选项将自动保存到
SharedReferences
”。它给我的印象是,您想在
首选项活动
之外更改首选项(这没有错),但您说这不是您想要做的

但是,我注意到您的
PreferenceActivity
没有从资源文件加载首选项,因此您需要添加
addPreferencesFromResource(R.xml.settings)onCreate
中的code>。但是,正如我所说,只有当用户直接与此活动交互时,您的首选项才会自动更改。
我希望这能有所帮助。

我不想在“首选项”活动之外更改任何内容,我只想得到它的设置,教程只是解释了我所做的,所以我仍然不明白哪里出了问题。我在另一个测试程序中以同样的方式设置了这个设置,它工作得非常完美
Editor e = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
e.putBoolean(Preferences."PREF_SMS_ON", true);
e.commit();