0

ここで何が間違っているのかわかりません。助けていただければ幸いです。

私のメイン アクティビティの 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() メソッドに入力されたデフォルト。

誰かが理由を知っていますか?

EDIT @Gunnar Karlsson

に変更した後getDefaultSharedPreferences、121行目でエラーが発生します。これは次のとおりです。

msMainClockStart = prefs.getLong( "Main_Clock_Minutes", 0 );

エラーには、「ロングから文字列にキャストできません。しかし、msMainClockStart はロングで、prefs.getLong() はロングを返すため、なぜ機能しないのかわかりません。

4

2 に答える 2

0

でプリファレンスを設定しているので

PreferenceManager.setDefaultValues(context, R.xml.preferences, false);

使用する

prefs = PreferenceManager.getDefaultSharedPreferences(context)

設定を取得するのではなく、getPreferences()

于 2013-01-06T04:59:38.213 に答える
0

PreferenceManager を使用するために、2 つのオプションを発見しました。1 つ目は、設定サブクラスを作成する方法、またはそれを文字列として保存してから 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;

これは完璧に機能しました。

于 2013-01-06T20:19:45.900 に答える