1. ホーム
  2. android

プリファレンスに変更が加えられたかどうかを検出する方法は?

2023-10-24 13:50:32

質問

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

どのように解決するのですか?

解決方法

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

あなたの PreferenceActivity のメンバーにしてください。 PreferenceActivity クラスのメンバーにして registerOnSharedPreferenceChangeListener(spChanged) の中で PreferenceActivity.onCreate() メソッドを使用します。

私はそうしていますが、問題が起きたことはありません。

そうでなければ、リスナーでの条件チェックに問題があります。 コードを投稿してください。

EDITしてください。

投稿されたコードから prefs をクラスのメンバ変数にすることで、グローバルなスコープを持つようになります。

そして行うのは prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); の代わりに getSharedPreferences というのは、そのファイルが作成されていないからです。

ファイルを作成するためには PreferenceManager . を取得するには PreferenceManager を使用します。 Activity.getPreferenceManager() .