128

PreferenceActivityを使用して、ユーザーがいくつかの値を設定できるようにしています。定義された設定でxmlファイルをフィードしています。

私は彼らのためにすべてを設定しandroid:defaultValue=""ました。

アプリケーションを起動するときに、プリファレンスが必要です。プリファレンスがまだ手動で設定されていない場合は、デフォルト値が必要です。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean value = prefs.getBoolean("key"), false); 

しかし、android:defaultValue="true"私がまだ得るときfalse。したがって、XMLで設定されたdefaultValuesは、設定画面を初期化するとき以外はどこでも使用されていないように見えます。

getBoolean()メソッドのデフォルト値をハードコーディングしたくありません。それで、これらを1か所で定義するだけでデフォルト値を取得する方法はありますか?

4

6 に答える 6

184

この質問は私のものと似ています:

xml-in-main-activity からの初期化設定

メソッドでこのコードを使用するだけですonCreate

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

XML から設定をロードし、最後のパラメーター ( readAgain) により、ユーザーの設定が上書きされないことが保証されます。つまり、readAgain引数を に設定falseすると、このメソッドが過去に呼び出されたことがない場合にのみデフォルト値が設定されるため、アクティビティが作成されるたびにユーザーの設定を上書きすることを心配する必要はありません。

詳細な調査のために、Android API のPreferenceManager.setDefaultValuesを調べてください。

于 2010-05-20T21:00:24.350 に答える
27

使用している場合は注意してください
getSharedPreferences(String sharedPreferencesName, int sharedPreferencesMode)

デフォルトを設定するために使用する必要がある設定を取得するには !
PreferenceManager.setDefaultValues(Context context, String sharedPreferencesName, int sharedPreferencesMode, int resId, boolean readAgain)

例えば:
PreferenceManager.setDefaultValues(this, PREFS_NAME, Context.MODE_PRIVATE, R.xml.preference, false);

これが誰かを助けることができることを願っています。

于 2011-12-19T18:58:55.863 に答える
13

Pixelの受け入れられた回答で:

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

falseデフォルトが上書きされないことを意味すると述べられています。これはそれが行うことではなく、アプリケーションに複数のエントリ ポイントがある場合に解析を停止する効率フラグです。残念ながら、テストは環境設定ファイルごとに行われるわけではないため、複数の環境設定ファイルがある場合はtrue、最初のファイル以外すべてでコーディングする必要があります。

効率が心配な場合は、次のようにコーディングできます。

final static private int SPL = 1;
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (sp.getInt("spl", 0) != SPL)
{
    PreferenceManager.setDefaultValues(this, R.xml.prefs1, true);
    PreferenceManager.setDefaultValues(this, R.xml.prefs2, true);
    sp.edit().putInt("spl", SPL).apply();
}

共有設定をさらに追加する場合は、SPL を高い数値に設定してください。

于 2014-09-01T08:57:08.480 に答える
2

たとえば、DialogPreference私はこれを行います:

@Override
protected void onSetInitialValue(boolean restore, Object defaultValue) {
    super.onSetInitialValue(restore, defaultValue);

    if (restore) {
        mValue = shouldPersist() ? getPersistedString(mDefault) : mDefault;
    } else {
        mValue = mDefault;
    }
}

mDefault は次のとおりです。

  • mContext.getResources().getString(attrs.getAttributeResourceValue(androidns,"defaultValue", 100));
  • Rでインデックスを作成したもの。
于 2010-04-22T14:59:44.257 に答える
1

また、以前に SharedPreferences を使用したことがないことも確認してください。それらが変更されていないことを確認するには (setDefaultValues(this,xml,false) が無効であることを意味します)、アプリをアンインストールし、もう一度アップロードして、値が変更されていないことを確認します。これは私を助けました。

于 2016-11-30T15:36:02.250 に答える