Перезапуск ActionBarSherlock для применения темы вызывает неправильные методы жизненного цикла - PullRequest
0 голосов
/ 13 марта 2012

Я использую SherlockFragmentActivity с 3 вкладками. Каждая из этих вкладок содержит SherlockFragment.

Если я перезапущу свое приложение (чтобы применить тему) с этим кодом: (спасибо Dante !)

finish();
intent = new Intent(this, <your_activity>.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

приложение корректно завершает работу, но если приложение запускается снова, вызываются все методы жизненного цикла моих фрагментов. Все работает нормально, но для одного необходимого boolean установлено значение false в onDestroy, но фрагмент не уничтожен. Значит, boolean не так.

Есть ли способ исправить? Я сделал что-то неправильно?

1 Ответ

1 голос
/ 13 марта 2012

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

Прежде чем применить setTheme(THEME); Вы должны получить это значение.

Это начальное значение:

public static int THEME = R.style.Theme_Sherlock;

Сначала установите значение (например, «темный») и перезапустите приложение:

DBAdapter db = new DBAdapter(this);
try {
    db.open();
    db.UpdateOption("theme", "dark");
}
catch (Exception ex) {}
finally {
    db.close();
}
finish();
Intent intent = new Intent(this, ActionBarTabsPager.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Затем вы получите новое значение и установите ТЕМУ

DBAdapter db = new DBAdapter(this);
Cursor c = null;

try {
    db.open();
    c = db.GetOption(c, "theme");
    String theme = c.getString(1);
    if (theme.equalsIgnoreCase("dark")) {
        THEME = R.style.Theme_Sherlock;
    }
    else if (theme.equalsIgnoreCase("light")) {
        THEME = R.style.Theme_Sherlock_Light;
    }
    else if (theme.equalsIgnoreCase("darklight")) {
        THEME = R.style.Theme_Sherlock_Light_DarkActionBar;
    }
}
catch (Exception ex) {}
finally {
    try {
            if (c != null)
            {
                c.close();
                c = null;
            }
        }
        catch (Exception ex){}
        db.close();
}
setTheme(THEME);

У меня есть табуляции ОПЦИИ для сохранения некоторых настроек. Конечно, это также можно сделать с общими настройками.

...