我使用带有3个标签的SherlockFragmentActivity
。这些选项卡中的每个都包含一个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
中将所需的onDestroy
设置为false,但片段arent被破坏。就是说,boolean
是错误的。有没有办法解决?我做错什么了吗?
最佳答案
您必须将值保存在某个地方,例如在数据库中或在共享首选项中。
应用setTheme(THEME);
之前,必须检索该值。
这是初始值:
public static int THEME = R.style.Theme_Sherlock;
首先设置值(例如“ dark”),然后重新启动应用程序:
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);
我有一个表格选项来保存一些设置。当然,这也可以通过共享首选项来完成。