2

settings に関する Android のドキュメントを読んだ後、環境設定の変更のリッスンについていくつか質問があります。

「使用が設定の 1 つを変更するとすぐに通知を受け取りたい場合、いくつかの理由があります。変更が設定のいずれかに発生したときにコールバックを受け取るには、SharedPreference.OnSharedPreferenceChangeListener インターフェイスを実装し、リスナーを登録します。 registerOnSharedPreferenceChangeListener() を呼び出して、SharedPreferences オブジェクト。」

よくわかりませんし、このリスナーを実装することがなぜ重要なのかわかりませんでした。それは何をするためのものか?いつ使う?現在、リスナーを実装しなくても、私の設定は正常に機能しますが、設定や特定の場合にのみ重要ですか? ありがとう。

リソース: http://developer.android.com/guide/topics/ui/settings.html#Fragment

4

1 に答える 1

4

を実装する必要はありませんOnSharedPreferenceChangeListener。利便性のために存在する機能です。

設定の変更にすぐに対応したい場合があります。たとえば、ユーザーがアクティビティの背景色を変更できる「設定」アクションがある場合、ユーザーが選択を行ったときに、ユーザーが再起動したときではなく、すぐに背景色を変更したいとします。アクティビティ。これを行う 1 つの方法は、アクティビティが でバックグラウンド設定のステータスを確認することですonResume()が、別の方法は、アクティビティが および に登録するOnSharedPreferenceChangeListener( でonStart登録を解除するonStop) ことです。このようにリスナーを使用すると、コードが単純になる場合があることがわかりました。また、設定の変更に反応する必要があるコードが通常、フレームワークのライフサイクル メソッドに参加しない場合にも大いに役立ちます。

の実装OnSharedPreferenceChangeListenerは非常に簡単です。クラスを宣言するかimplements OnSharedPreferenceChangeListener、オブジェクトを実装する必要があります。例えば:

public class MyActivity extends Activity {
    . . .
    private final OnSharedPreferenceChangeListener mPrefsListener =
        new OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                                                  String key)
            {
                if (key.equals(IMPORTANT_PREF_KEY)) {
                    setImportantValue(sharedPrefs.getInt(IMPORTANT_PREF_KEY, -1));
                }
            }
        };

    @Override
    protected void onStart() {
        super.onStart();
        PreferenceManager.getDefaultSharedPreferences(this)
            .registerOnSharedPreferenceChangeListener(mPrefsListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        PreferenceManager.getDefaultSharedPreferences(this)
            .unregisterOnSharedPreferenceChangeListener(mPrefsListener);
    }

    void setImportantValue(int value) {
         . . .
    }
}
于 2014-09-29T14:15:58.437 に答える