我遇到了一个小问题,每当我尝试更改程序中的首选项时,他们都不会更改活动,只会保留默认值。
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 class
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>
我不明白它的错误,它看起来应该对我有用
答案 0 :(得分:3)
嗯,您的代码中存在一些问题。
此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
。但是,就像我说的那样,只有当用户直接与此活动进行交互时,您的偏好才会自动更改。
我希望有所帮助。