web-dev-qa-db-ja.com

設定が変更されたかどうかを検出する方法は?

PreferenceActivityを拡張し、アプリの設定画面を表示するクラスがあります。設定に変更が加えられたかどうかを確認することはできますか?

これは役立ちます...

http://developer.Android.com/reference/Android/content/SharedPreferences.OnSharedPreferenceChangeListener.html

その他の関連記事: SharedPreferences.onSharedPreferenceChangeListenerが一貫して呼び出されていない


public class PreferenceClass extends PreferenceActivity {

    OnSharedPreferenceChangeListener listener;

    public void onCreate(Bundle savedInstanceState) {
        SharedPreferences prefs = this.getSharedPreferences("settings", 0);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                int flag = 1;
            }
        };
        prefs.registerOnSharedPreferenceChangeListener(listener);
        super.onCreate(null);
        addPreferencesFromResource(R.xml.settings);
    }
}
69
mixkat

行う

_SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                           SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        // your stuff here
    }
};
_

PreferenceActivityで、つまりPreferenceActivityクラスのメンバーにして、registerOnSharedPreferenceChangeListener(spChanged)メソッドでPreferenceActivity.onCreate()を実行します。

それが私がしていることであり、問​​題はありません。

それ以外の場合、リスナーに障害が発生するのは条件チェックです。コードを投稿してください。

編集:

投稿したコードから、prefsをクラスメンバー変数にして、グローバルスコープを持つようにする必要があります。

また、getSharedPreferencesの代わりにprefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());を実行します。これは、そのファイルを作成していないためです。

ファイルを作成するには、PreferenceManagerを使用する必要があります。 PreferenceManagerを取得するには、Activity.getPreferenceManager()を使用します。

61
techiServices

PreferenceActivityクラスで、SharedPreferences.OnSharedPreferenceChangeListenerインターフェイス。必要なonSharedPreferenceChangedメソッドをクラスに追加し、onCreateに登録します。

こちらのサンプルコードをご覧ください。

public class MyPreferences extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fw_preferences); //deprecated
        PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // handle the preference change here
    }

}
63
Jonathan