10

設定画面にCheckBoxPreferenceを使用しています。XML は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android" >
    <CheckBoxPreference android:key="includeAddress"
                    android:title="Include Address" 
                    android:summary=""
                    android:defaultValue="true" />
    <CheckBoxPreference android:key="rememberName"
                    android:title="Remeber Name" 
                    android:summary=""
                    android:defaultValue="false" />
</PreferenceScreen>

アプリケーションで値を変更します。ユーザーがログアウトしたら、xml で定義されているデフォルト値に設定する必要があります。しかし、うまくいかないようです。最後に選択した値が保持されます。

Androidのドキュメントを読んで、これを見つけました:

PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.preference_settings, true);

しかし、それはほとんど仕事をしません!SharedPreferences で別の方法を試しました。

SharedPreferences preferences = getParent().getSharedPreferences("preference_settings", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();

それもうまくいきませんでした!

何か不足していますか?XML で定義されたデフォルト値にプリファレンスを設定するにはどうすればよいですか?

前もって感謝します!

4

1 に答える 1

8

共有設定は機能するはずですが、デフォルトの共有設定を使用する必要があります..

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();

ファイル名を使用して共有設定を取得するために、Android はこの名前を作成します (おそらくプロジェクトのパッケージ名に基づいていますか?)。次のコードを SettingsActivity onCreate に入れ、preferenceName を確認することで取得できます。

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

文字列は「com.example.projectname_preferences」のようなものにする必要があります。プロジェクトのどこかにそれをハードコーディングし、それを getSharedPreferences() に渡すと、準備完了です。

なので:

 PreferenceManager.getDefaultSharedPreferences(this);

アプリケーション パッケージ全体に対してグローバルな設定ファイルへのアクセスを提供します。任意のアクティビティが設定にアクセスできます (内部的に、設定を保持する xml ファイルの名前は になりますyour.application.package_preferences.xml)。

getParent().getSharedPreferences("preference_settings", MODE_PRIVATE);

contextInstance クラスの設定のみを提供します: コンテキストのクラスのインスタンスのみがこれらの設定にアクセスできます (パッケージはまだyour.application.packageにありyour.application.package.SecondActivity、内部の設定ファイルは ですSecondActivity.xml)。

于 2012-12-07T11:34:59.503 に答える