共有設定のリスナーを実装するアクティビティがあるので、ユーザーがFragmentPrefsをプルアップして値を変更すると、onSharedPreferenceChanged(SharedPreferences prefs、String key)が呼び出されます。
SharedPreferences prefs;
OnSharedPreferenceChangeListener listener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
registerPreferenceListener();
}
private void registerPreferenceListener()
{
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Debug.out("LISTENING! - Pref changed for: " + key + " pref: " +
prefs.getString(key, null) );
}
};
prefs.registerOnSharedPreferenceChangeListener(listener);
}
問題は、コードに悪臭を発生させることなく、設定が変更されたイベントを適切に処理する方法を見つけようとしていることです。
管理する必要のある設定がかなりあるので、ネストされたIF ELSEステートメントを使用すると、時間がかかり、面倒になります。ポリモーフィズムの実装について考えましたが、それは問題なく機能しますが、呼び出すクラスの実装を決定するためにif/elseが必要です。
changePrefメソッドはキー識別子として文字列を使用しますが、R.string.pref_nameを参照できるので、スイッチの方が優れている可能性があります。
私は物事を複雑にしすぎていますか、それとも些細なことを見逃していますか?
ありがとう。