77

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);
    }
}
4

2 に答える 2

67

行う

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

あなたのPreferenceActivity、すなわちそれをあなたのPreferenceActivityクラスのメンバーにしregisterOnSharedPreferenceChangeListener(spChanged)てから、PreferenceActivity.onCreate()メソッドで行います。

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

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

編集:

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

そして、そのファイルを作成していないので、prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());代わりに実行してください。getSharedPreferences

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

于 2011-02-14T23:31:14.653 に答える
67

PreferenceActivityクラスで、インターフェースを実装しますSharedPreferences.OnSharedPreferenceChangeListeneronSharedPreferenceChanged必要なメソッドをクラスに追加し、に登録します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
    }

}
于 2012-07-04T14:09:34.740 に答える