Android SharedPreferences, темы и кнопка возврата - PullRequest
0 голосов
/ 01 июня 2011

У меня есть простое действие с темой, установленной через setTheme (), идентификатор темы хранится в SharedPreferences, я получаю эти данные и устанавливаю theTheme () перед super.OnCreate () в основном упражнении. При нажатии кнопки меню я могу запустить действие предпочтений. При обновлении настроек и нажатии кнопки «Назад» для возврата к основному виду деятельности тема не обновляется до новой настройки. Только закрытие приложения и повторное открытие исправляет это.

Каков наилучший способ обновить основное задание и перезагрузить тему после нажатия кнопки «Назад» в задании предпочтений? Я пытался поместить setTheme () в OnResume, но безрезультатно.

Любая помощь с благодарностью,

Спасибо, Рик

Ответы [ 5 ]

1 голос
/ 01 июня 2011

См. страницу :

По словам Дайан Хэкборн, инженера по Android Framework:

Вы можете установить тему только во время создание. Чтобы применить тему, весь интерфейс должен быть перекачан и перестроен из своих ресурсов.

0 голосов
/ 11 июля 2016

Вот как я это сделал:

У меня есть приложение, которое имеет несколько тем на выбор. Обычно, когда тема выбрана, а затем нажата кнопка «Назад», тема возвращается к предыдущей. Это проблема.

Я использовал трюк @Override для onBackPressed (), чтобы сделать трюк. Ниже приведен код (я также изменил код для первого действия в стеке [мой Навигационный ящик]).

@Override
public void onBackPressed()
{
    Intent intent1 = new Intent(this, NavigationActivity.class);
    startActivity(intent1);
    super.onBackPressed();  // optional depending on your needs
}

Этот код в действии «Переключение темы» сделал его таким, чтобы обычный код кнопки «Назад» не вызывался, чтобы уничтожить текущее действие и вернуться к старой теме. Он просто переходит к предыдущему действию, в котором был пользователь, которое является моей навигационной активностью. Настройте это, как вы будете.

Еще одна вещь, на которую следует обратить внимание, это то, что кнопка «Назад» может по-прежнему мучить вас, даже если после этого она перейдет в NavigationActivity, и если я снова нажму кнопку «Назад», тема перевернется. Я вызвал тот же метод, что и раньше, но я вынул оператор super.onBackPressed();, который и стал причиной возврата. Вот как это выглядит:

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    }
}

Надеюсь, это поможет вам!

0 голосов
/ 21 августа 2014

зарегистрируйте слушателя onsharedpreferencechange в своей деятельности

0 голосов
/ 01 июня 2011

и setTheme () перед super.OnCreate () в основной деятельности

Вы никогда не должны ставить какой-либо код перед super.onCreate () или super.onResume (), весь ваш код должен размещаться после этих вызовов. Может быть, это проблема.

0 голосов
/ 01 июня 2011

Если нет другого способа, вы можете сделать что-то подобное в своей деятельности после обновления настроек:

Intent i = new Intent(this, YourActivity.class);
startActivity(i);
finish();

Это не слишком элегантно, и я надеюсь, что есть более простой способ.

...