0

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

Если перезапустить мое приложение (применить тему) с этим кодом: (! Благодаря 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); 

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

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

ответ

1

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

Прежде чем применять 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); 

У меня есть вкладка OPTIONS, чтобы сохранить некоторые настройки. Это также можно сделать с помощью общих настроек, конечно.

+0

Применение темы работает. Это просто проблема, что мои фрагменты после перезапуска и мгновенного выключения. Например, я больше не могу получить доступ к списку. – Leandros

+0

Я не могу запросить listlayout. Это делает меня сумасшедшим. : D – Leandros

+0

Тогда я не уверен, что вы имеете в виду. Вы можете перефразировать вопрос, пожалуйста? Имейте в виду: если вы выполните перезапуск, вы должны закончить работу с корнем. Затем это точно так же, как вы закрываете приложение и начинаете его позже. Если это возможно, напишите какой-нибудь код, где ошибки, по вашему мнению. – Dante

Смежные вопросы