1

値を設定するために使用CheckBoxPreferenceします。PreferenceActivity後で、ReceiverやServiceからその値を確認したいと思います。findPreference()そのコンテキストからメソッドを使用することはできません。SharedPreferencesこの設定値はとにかく保存されていることは知っていますが、重要なのは何ですか?チェックボックスの値を取得するにはどうすればよいですか?

4

4 に答える 4

6

この設定値はとにかくSharedPreferencesに保存されていることは知っていますが、重要な点は何ですか?

android:key好みのXMLでどのような値を使用する場合でも。

チェックボックスの値を取得するにはどうすればよいですか?

PreferenceManager.getDefaultSharedPreferences()を取得するために呼び出してから、で使用したキーを使用してSharedPreferences呼び出します。getBoolean()android:key

于 2011-07-31T15:54:25.657 に答える
2

設定XMLには、次のようなものがあります。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:enabled="true"
    android:title="@string/s_pref" android:key="@string/pref"
    android:defaultValue="@string/d_pref"></CheckBoxPreference>
</PreferenceScreen>

あなたのstrings.xmlは次のようになります:

<string name="pref">my.package.PREF</string>
<string name="s_pref">Prompt</string>
<string name="d_pref">true</string>

アクティビティのonCreate()は、次のようになります。

prefs = PreferenceManager.getDefaultSharedPreferences(this);
pref = prefs.getBoolean(getString(R.string.pref), true));

誰かが設定を変更したときに何かをしたい場合は、onActivityResult()をアクティビティに追加し、startActivityForResult()を使用して設定アクティビティを開始します。設定の変更を示す結果コードを指定してonActivityResult()が呼び出された場合は、別のgetDefaultSharedPreferences()を実行できます。

共有設定フレームワークはデータを自動的に保持します...設定アクティビティでOnPreferenceChangeListenerを使用したい場合は可能ですが、自分で積極的に処理する必要はありません。

于 2011-07-31T19:50:10.317 に答える
0

CommonsWareの回答に追加する唯一のことは、サービスについて言及したので、サービスが知る必要のある設定をIntentエクストラに入れることができるということです。例えば:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Intent intent = new Intent(this, MyService.class);
intent.putExtra("mypref", prefs.getString("mypref", ""));
startService(intent);
于 2011-07-31T17:27:29.883 に答える
0

あなたのサービスでこれを書いてみてください

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplication());

ここで、xmlで使用したキーを指定します

 if(preferences.getBoolean(your key ,true))
            {

これがお役に立てば幸いです。

于 2016-11-25T12:46:29.063 に答える