Реагировать на изменение активности настроек в Android

Итак, дело в том, что я пытаюсь заставить свое приложение для Android иметь настройки, чтобы пользователь мог изменить некоторые функции приложения (язык, тему и т. д.). Моя проблема возникает при попытке заставить приложение реагировать на изменение значения одного из этих параметров. Например тема один; моя идея заключалась бы в том, чтобы иметь «предпочтение переключателя». Когда он будет включен, тема приложения будет Material.Light, а когда выключена — Material. Для этого я хотел иметь некоторый метод «onValueChanged», который реагировал бы, когда переключатель менял свое положение. Проблема здесь в том, что я не могу правильно получить экземпляр SwitchPreference в моей SettingsActivity, потому что метод findPreference (key) устарел, и я действительно не знаю, как заставить его принимать значение необходимого ключ.

Есть ли способ сделать это, или я должен изменить способ мышления для этой проблемы?


person Silvan Zamora    schedule 14.02.2017    source источник


Ответы (1)


Вместо того, чтобы устанавливать тему в прослушивателе изменений onValue, вы также можете сделать, как показано ниже:

1) Создайте класс ThemeUtils и переключите регистр для выбора темы и установите тему для активности. Я создал свой стиль, здесь вы можете выбрать свой стиль

public class ThemeUtils {
public final static int THEME_Professional = 1;
public final static int THEME_Default = 2;
public static void onActivityCreateSetTheme(Activity activity, int sTheme) {
    switch (sTheme)
    {
    default:
    case THEME_Professional:
        activity.setTheme(R.style.ProfessionalTheme);
        break;
    case THEME_Default:
        activity.setTheme(R.style.DefaultTheme);
        break;
    }
}

}

2) В методе onCreate Activity вызовите метод setTheme

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme();
  }

3) Получает выбранную пользователем тему

   private void setTheme() {
    int themeInt = getThemeValue();
    ThemeUtils.onActivityCreateSetTheme(this, themeInt);
   }

4) После получения идентификатора стиля вы можете вызвать метод класса ThemeUtils onActivityCreateSetTheme.

private int getThemeValue() {
    SharedPreferences pref =     PreferenceManager.getDefaultSharedPreferences(getContext());
    Boolean isGrid = pref.getBoolean(getString(R.string.grid_switch), false);
    if (isGrid) {
        return 2;
    } else {
        return 1;
    }
}

Надеюсь этот вариант вам поможет!!!

person kavita    schedule 15.02.2017
comment
Я пытаюсь реализовать код, посмотреть, как он работает, и посмотреть, выполняет ли он свою работу, но получаю сообщение об ошибке; чему соответствует R.string.grid_switch? - person Silvan Zamora; 15.02.2017
comment
Это ключ предпочтения переключения. - person kavita; 15.02.2017
comment
В любом случае, если я правильно понимаю код (возможно, что я не понимаю... XD), это решает половину проблемы. Дело в том, что здесь вы проверяете выбранную тему на методе onCreate Activity. В этом случае потребуется уничтожить действие и создать его заново, чтобы изменение стало активным. Для меня оптимальным решением было бы получить сдачу сразу после смены положения переключателя. Тем не менее, если это невозможно, я могу добавить что-то вроде того, что изменения вступят в силу после перезапуска приложения, -- продолжается после -- - person Silvan Zamora; 15.02.2017
comment
‹SwitchPreference android:defaultValue=false android:key=grid_switch android:summary=@string/pref_description_grid_recommendations android:title=@string/pref_grid_recommendations /› - person kavita; 15.02.2017
comment
-- продолжается здесь -- И решите это так (XD). Это не оптимально, но возможно... - person Silvan Zamora; 15.02.2017
comment
Это ключ предпочтения переключения. ... я должен был подумать об этом. Виноват. :( - person Silvan Zamora; 15.02.2017
comment
После выбора темы в настройках вы вернетесь только к активности. Вы также можете вызвать этот setTheme в методе активности onStart. @Override protected void onStart() { super.onStart(); установить тему();} - person kavita; 15.02.2017