0

PreferenceActivity を作成し、xml ファイルを使用して、ユーザーが構成できる設定をロードしようとしています。しかし、どういうわけか「デフォルト値」が正しくロードされていません。これは、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 とは

4

2 に答える 2

0

これで問題が解決することを願っています。コメントには長すぎるため、これを回答として設定しましたが、これはまだチェックされていません。Your PreferenceActivity 内で設定を取得するには、次のようにします。

     public static Boolean GetBoolean(Context context, String Name) 
  {
CheckBoxPreference checkBoxPref = (CheckBoxPreference)findPreference("RemainLoggedIn");
boolean yourBoolean = checkBoxPref.isChecked();
return yourBoolean;
  }

今のところテストするIDEがないため(自宅にはない)、彼が機能するかどうかはよくわかりません。そうでない場合は、これを確認する時間をください。

于 2013-07-05T09:08:47.997 に答える
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 という名前の設定ファイル名を作成しています。

于 2013-07-05T08:58:52.997 に答える