1

私は持っている

SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

myPreferences.getBoolean("checkbox", true)

では、ユーザーがいつ設定の状態を変更したかをメイン アクティビティで知るにはどうすればよいでしょうか。たとえば、ユーザーが通知を受け取りたくない場合などです。ありがとう。

4

3 に答える 3

1

onSharedPreferenceChangeListener インターフェイスを実装する必要があります。次に、onCreate/onStart で変更の更新を受け取るように登録します。

myPreferences.registerOnSharedPreferenceChangeListener();

リスナーでは、次のようにします。

@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("MyKey")) {
    // Do something.
} else if (key.equals("MyOtherKey")) {
    // Do something else.
      }
}

onStop/onDestroy のリスナーを忘れずに削除してください。

于 2012-05-16T11:25:48.073 に答える
1

のすべての設定を再読み込みするかActivity.onResume()、メイン アクティビティが設定アクティビティを (メニューなどから) 起動する限り、 で起動してstartActivityForResult(Intent, int)すべての設定を再読み込みできますonActivityResult(int, int, Intent)

Notificationまた、適切な動作を開始する前に (つまり、あなたの例で を発行する前に)、関連する各設定を再確認するだけで十分であることがわかりました。

于 2012-05-16T11:23:24.803 に答える
0

設定が変更されたとき、または設定アクティビティが開始されたときに変更される静的ブール値を作成できます。このブール値の目的は、設定がダーティで再読み込みが必要であることをメイン アクティビティに知らせることです。フラグが trueonResumeの場合、再ロードする必要があります。mDirty

別のオプションはonResume、関係なく、すべての設定を再読み込みすることです。これは効率的ではないかもしれませんが、好みがたくさんなければ問題ありません。

最も効率的な方法は、設定アクティビティのすべての設定に対して onPreferenceChanged リスナーを設定することです。設定は、実際に変更された場合にのみアクティビティに通知します。これにより、ユーザーが設定アクティビティに入ったが、実際には何も変更しないというケースが解決されます。

于 2012-05-16T11:26:16.557 に答える