首选项管理器和共享首选项

时间:2013-01-06 03:45:34

标签: java android

我不确定我在这里做错了什么,并希望得到一些帮助。

在我的主要活动的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,所以我不确定它为什么不起作用。

2 个答案:

答案 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;

这很有效。