我不确定我在这里做错了什么,并希望得到一些帮助。
在我的主要活动的onCreate方法中,我有这个:
// set the default preferences
PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
// get the preferences
prefs = getPreferences(MODE_PRIVATE);
// Load the values or defaults from the SharedPreferences
msMainClockStart = prefs.getLong( "Main_Clock_Minutes", 0 );
useShotClock = prefs.getBoolean( "Use_ShotClock", false );
msShotClockStart = prefs.getLong( "Shot_Clock_Seconds", 20000 );
tvPeriodPrefix = prefs.getString( "Period_Prefix", "P" );
valMaxPeriods = prefs.getInt( "Max_Periods", 4 );
在我的res / xml / preferences.xml文件中,我有以下
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference
android:key="Main_Clock_Minutes"
android:positiveButtonText="SAVE"
android:negativeButtonText="CANCEL"
android:title="Main Clock (minutes)"
android:defaultValue="480000"
android:summary="How many minutes for the main clock."/>
<CheckBoxPreference
android:key="Use_ShotClock"
android:title="Enable Shot Clock"
android:defaultValue="true"/>
<EditTextPreference
android:key="Shot_Clock_Seconds"
android:title="Shot Clock (seconds)"
android:summary="How many seconds for the shot clock."
android:defaultValue="30000"/>
<EditTextPreference
android:key="Period_Prefix"
android:title="Period Prefix (e.g. Q, Shift, Period)"
android:defaultValue="Q"/>
<EditTextPreference
android:key="Max_Periods"
android:title="Maximum number of periods"
android:defaultValue="4"/>
由于某种原因,默认值未从xml文件中读取/加载。在正在使用的getLong()方法或getBool()方法中输入的默认值。
有谁知道为什么?
编辑@Gunnar Karlsson更改为getDefaultSharedPreferences
后,我在第121行遇到错误:
msMainClockStart = prefs.getLong( "Main_Clock_Minutes", 0 );
错误说“无法从长字符串转换为字符串。但msMainClockStart是一个Long,而prefs.getLong()返回一个Long,所以我不确定它为什么不起作用。
答案 0 :(得分:0)
由于您使用
设置首选项PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
使用
prefs = PreferenceManager.getDefaultSharedPreferences(context)
检索偏好设置,而不是getPreferences()
答案 1 :(得分:0)
为了使用PreferenceManager,我发现了两个选项。第一个是我可以创建一个首选项子类,或者另一个是将它保存为字符串,然后将其转换为Long。
以下是代码:
// set the default preferences
PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
// get the preferences
prefs = PreferenceManager.getDefaultSharedPreferences( context );
// Load the values or defaults from the SharedPreferences
msMainClockStart = Long.valueOf( prefs.getString( "Main_Clock_Minutes", "0" ) ) * 60000;
这很有效。