1

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

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

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

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

4

1 回答 1

3

好吧,您的代码中存在一些问题。本教程适用于创建首选项。此外,如果您想更改外部的首选项,PreferenceActivity您应该使用编辑器,例如:

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

我希望它有帮助

对您的评论的回复

好吧,问题是您正在使用PreferenceActivity,正如此处的文档所示,它用于显示首选项的视觉样式。此外,正如这里所指出SharedPreferences,“当用户与其交互时,首选项将自动保存到”。它给我的印象是你想改变外面的偏好PreferenceActivity(这没有错),但你说那不是你想要做的。

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

于 2011-02-11T20:17:30.083 回答