我正在尝试创建PreferenceActivity并使用xml文件加载可由用户配置的首选项。但不知何故,“defaultvalue”没有正确加载。这是我的preferenceActivity代码:
public class Instellingen extends PreferenceActivity{
public static final int mode= Activity.MODE_PRIVATE;
public static final String KEY_LOCKACTIONS = "lockactions";
public static final String KEY_VERSIE = "Versie";
public static final String KEY_CHAUFFEUR = "Chauffeur";
public static final String KEY_LATITUDE = "Latitude";
public static final String KEY_LONGITUDE = "Longitude";
public static final String KEY_NEEDLOCUPDATE = "NeedLocUpdate";
public static final String KEY_NEEDAPPUPDATE = "NeedAppUpdate";
public static final String KEY_NEEDSYNC = "NeedSync";
public static final String KEY_SYNCCONTENT = "NeedSyncContent";
public static final String KEY_THREADCOUNT = "ThreadCount";
public static final String KEY_FREESYNCTHREAD = "FreeSyncThread";
public static final long version = 0;
static SharedPreferences mySharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
}
public static Boolean GetBoolean(Context context, String Name)
{
mySharedPreferences = context.getSharedPreferences("KCStandaardSettings", mode);
return mySharedPreferences.getBoolean(Name, false);
}
这是我试图获取值的代码段:
@Override
public void run() {
Boolean music = Instellingen.GetBoolean(contextAfterThread, "noteSound");
for (int i = 0; i < number; i++) {
try {
sleep(500);
} catch (InterruptedException e) {
TLogFile.appendLog("e", "log_tag", "Error sleeping soundthread " + e.toString());
e.printStackTrace();
}
if(music){
TSound.PlayNotification(contextAfterThread);
}
}
}
这是xml本身(文件名是preferences.xml)
<CheckBoxPreference
android:id="@+id/cbRemainLoggedPreferences"
android:defaultValue="false"
android:key="RemainLoggedIn"
android:title="@string/remainLoggedIn" />
<CheckBoxPreference
android:id="@+id/cbNotificationSound"
android:defaultValue="true"
android:key="noteSound"
android:title="@string/Sound" />
<!-- <CheckBoxPreference
android:id="@+id/cbWidgetAllPreferences"
android:defaultValue="true"
android:key="cbWidgetAll"
android:title="Toon in de Widget de tab met alle berichten" />
<CheckBoxPreference
android:id="@+id/cbWidgetUnreadPreferences"
android:defaultValue="true"
android:key="cbWidgetUnread"
android:title="Toon in de Widget de tab met ongelezen berichten" />
<CheckBoxPreference
android:id="@+id/cbWidgetReadPreferences"
android:defaultValue="true"
android:key="cbWidgetRead"
android:title="Toon in de Widget de tab met gelezen berichten" />-->
我知道在讨论同一问题之前有很多问题。我仍然在问这个问题的原因是因为它们都不适合我。 我试过用: PreferenceManager.setDefaultValues(this,R.xml.preferences,false);
但就像我说它没有解决我的问题。要清楚的是,问题是找不到密钥,导致SharedPreferences函数自己返回默认的“错误”值。
是否有可能出现此问题,因为我正在使用targetsdk lvl 8构建此应用程序?哪个是Android 2.2
答案 0 :(得分:0)
删除
mySharedPreferences = context.getSharedPreferences("KCStandaardSettings", mode);
这
public static Boolean GetBoolean(Context context, String Name)
{
mySharedPreferences = context.getSharedPreferences("KCStandaardSettings", mode);
return mySharedPreferences.getBoolean(Name, false);
}
在GetBoolean中,您将创建一个名为KCStandaardSettings的首选项文件名。
答案 1 :(得分:0)
我希望这会解决你的问题,我只是将其设置为答案,因为评论时间过长,但尚未检查。要在PreferenceActivity中获取首选项,请执行以下操作:
public static Boolean GetBoolean(Context context, String Name)
{
CheckBoxPreference checkBoxPref = (CheckBoxPreference)findPreference("RemainLoggedIn");
boolean yourBoolean = checkBoxPref.isChecked();
return yourBoolean;
}
我不确定他的作品是否合适,因为我现在没有IDE可以测试(不在家)。如果没有,请给我一些时间来检查一下。