13

簡単なアプリのシナリオを説明しようと思います。私のアプリは「メインビュー」に直接移動します。このメインビューに、TextViewを介して作成された現在の設定を表示するを挿入しましたPreferenceManager。簡単にするために、設定にチェックボックスがあるとしましょう。アプリを最初に起動したとき-TextViewメインビューのにチェックボックスの設定が正しく表示されます(true)。次に、設定メニューに移動し、ポップアップしてから、falseに変更します。メインビューに戻りますが、変化は見られません。falseに変更した後もtrueと表示されます。アプリを終了してから再起動すると、すべて問題なく、変更が表示されます。

どうやら、設定を変更している間、メインビューはバックグラウンドのままですか?設定を変更した後、メインビューを再描画または更新するにはどうすればよいですか?

4

2 に答える 2

23

メイン アクティビティにOnSharedPreferenceChangeListenerを実装できます。

@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
    if (PREFKEY_OF_INTEREST.equals(key))
        updateSomethingInMainView();
}

そして onCreate() 呼び出しで:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
于 2010-04-18T19:32:43.943 に答える
4

設定に入ると、現在のアクティビティが一時停止され、戻ったときに再開されます(Androidサイトのライフサイクル図のライフサイクル図を参照してください)。onResume()内から何らかの再描画をトリガーできるはずです。これにより、ページ上のデータを再入力できるようになります。ある種のinvalidate()呼び出しは、私が推測することを行います。

于 2010-04-13T23:15:16.417 に答える