0

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 でそれを上書きして、選択したデザインの色を表現するにはどうすればよいですか?

あなたの助けは大歓迎です! ありがとう!

4

1 に答える 1

0

私はそれを理解しました:問題は、アイテムが特定のキーのデフォルト値を常に受け​​取っていることだと思いました。

この動作を上書きするには、次のように、設定フラグメントの onCreate() メソッドのエディターで Apply() (コミットも機能すると思います) を呼び出す必要がありました。

getPreferenceManager().getSharedPreferences().edit().putInt("colorField" + colorFieldList.get(i).index, colorFieldList.get(i).color).apply();

(上に投稿したループでこれを行ったので、作成時にすべての色設定が上書きされた設定値で新しい色に割り当てられました)

于 2015-03-11T22:43:25.367 に答える