Изменение цвета фона с помощью ListPreference

Я пытаюсь изменить цвет фона активности, используя listPreference. Я написал некоторый код, но он идет прямо к желтому.

Вот массивы строк:

<string-array name="backgroundColors">
    <item name="1">Red</item>
    <item name="2">Green</item>
    <item name="3">Blue</item>
    <item name="4">Yellow</item>
</string-array>

<string-array name="backgroundColorEntries">
    <item name="1">#FF0000</item>
    <item name="2">#00FF00</item>
    <item name="3">#0000FF</item>
    <item name="4">#FFFF00</item>
</string-array>

Вот где я сделал список в файле XML:

<ListPreference
    android:key="prefSetBackground"
    android:entries="@array/backgroundColors"
    android:summary="Set the background color of the main page."
    android:entryValues="@array/backgroundColorEntries"
    android:title="@string/pref_1" />

И, наконец, вот часть Java:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    SharedPreferences getPrefs = PreferenceManager
        .getDefaultSharedPreferences(getBaseContext());
        String background_chooser = getPrefs
                .getString("prefSetBackground", "0");
        View view = findViewById(R.id.main_layout);

        if (background_chooser.equals("1")) {
            view.setBackgroundColor(Color.RED);
        } else if (background_chooser.equals("2")) {
            view.setBackgroundColor(Color.GREEN);
        } else if (background_chooser.equals("3")) {
            view.setBackgroundColor(Color.BLUE);
        } else {
            view.setBackgroundColor(Color.YELLOW);
        }

    super.onWindowFocusChanged(hasFocus);
}

Я думаю, что я делаю что-то неправильно здесь, но я не уверен, что. Я новичок в использовании ListPreferences, поэтому, пожалуйста, потерпите меня.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Из того, что я могу сказать, когда приложение работает на моем телефоне, по умолчанию используется последняя часть, что означает, что красный, синий и зеленый возвращают false. Цвет фона становится желтым. Когда я меняю настройки, ничего не происходит.

РЕДАКТИРОВАТЬ № 2: кажется, что listpreference и Java не связаны друг с другом. Я не знаю, что я делаю неправильно.


person Andrew Quebe    schedule 28.02.2014    source источник


Ответы (1)


Попробуй это

String background_chooser = getPrefs
            .getString("prefSetBackground", "1");

Вместо

String background_chooser = getPrefs
            .getString("prefSetBackground", "0");

Редактировать: Также установите android:defaultValue="1" в файле pref xml.

так что теперь ваш список pref xml должен быть таким

<ListPreference
  android:key="prefSetBackground"
  android:entries="@array/backgroundColors"
  android:summary="Set the background color of the main page."
  android:entryValues="@array/backgroundColorEntries"
  android:title="@string/pref_1"
  android:defaultValue="1" />

Вам также необходимо заменить это

<string-array name="backgroundColorEntries">
  <item name="1">#FF0000</item>
  <item name="2">#00FF00</item>
  <item name="3">#0000FF</item>
  <item name="4">#FFFF00</item>
</string-array>

Этим

 <string-array name="backgroundColorEntries">
  <item name="1">1</item>
  <item name="2">2</item>
  <item name="3">3</item>
  <item name="4">4</item>
</string-array>
person Chirag Ghori    schedule 28.02.2014
comment
Результаты такие же. - person Andrew Quebe; 28.02.2014
comment
ОК, изменил XML, и ничего не произошло. Он по-прежнему остается желтым, и когда я меняю настройки списка, ничего не происходит. - person Andrew Quebe; 28.02.2014
comment
Пожалуйста, напечатайте background_chooser в журнале и проверьте, какое значение вы получили. - person Chirag Ghori; 28.02.2014
comment
Он печатает #0000FF. Но это потому, что предпочтение установлено на синий. - person Andrew Quebe; 28.02.2014
comment
Да, это работает! Вы только что получили лучший ответ! Большое Вам спасибо :) - person Andrew Quebe; 28.02.2014
comment
давайте продолжим обсуждение в чате - person Andrew Quebe; 28.02.2014