Preference Fragment の onCreate メソッドで、いくつかの Color Picker 設定 (Preference から拡張) を作成しています。
カラーピッカーは、アクティブな現在のデザインを表します。したがって、ユーザーが (同じ PreferenceFragment で) 新しいデザインを選択すると、新しいデザインに従ってすべてのカラー ピッカーを変更する必要があります。
このために、現在のデザインの新しい色の値を取得し、PreferenceFragment を再構築しています。
public static void RebuildSettings() {
colorFieldList = GetNewColorFields();
if (mPrefsFragment != null) {
mPrefsFragment.onDestroy();
mPrefsFragment.onCreate(null);
} else Log.i(Patterns.TAG, "mPrefsFragment = null");
}
次に、Preference Fragment の onCreate メソッドで、次のように colorFieldList (新しいデザインの色を使用) から色フィールドを再作成します。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[...]
PreferenceCategory colorSettings = (PreferenceCategory) findPreference("prefCat_ColorSettings");
for (int i = 0; i < colorFieldList.size(); i++) {
AmbilWarnaPreference colorPicker = new AmbilWarnaPreference(getActivity(), null);
colorPicker.forceSetValue(colorFieldList.get(i).color);
colorPicker.setTitle(colorFieldList.get(i).name);
colorPicker.setSummary("Set color in " + colorFieldList.get(i).name);
colorPicker.setKey("colorField" + colorFieldList.get(i).index);
colorPicker.setOnPreferenceChangeListener(colorListener);
if (colorSettings != null)
colorSettings.addPreference(colorPicker);
}
[...]
}
これでデザインを変更でき、カラー フィールドは新しいデザインに従って更新されますが、カラー ピッカー フィールドをまだ変更していない場合のみです。フィールドは想定どおりに変更されますが、カラー フィールドを変更/新しい色を選択するとすぐに、このフィールドは選択した色のままになりますが、デザインが変更されるたびに設定を完全に再構築します!
私は何が欠けていますか?値が SharedPreferences (?) に保存されていない限り、色が更新されるのはなぜですか?
Android は、カラー ピッカーが設定されると、その値を常に共有設定から取得すると思いますが、OnCreate でそれを上書きして、選択したデザインの色を表現するにはどうすればよいですか?
あなたの助けは大歓迎です! ありがとう!