2012-03-13 13 views
0

我使用带有3个选项卡的SherlockFragmentActivity。每个选项卡都包含SherlockFragmentActionBarSherlock重新启动以应用主题触发器错误的生命周期方法

如果我重新启动我的应用程序(应用主题)使用此代码:(!感谢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正常,但如果应用程序被再次启动,全生命周期的方法我片段被调用。一切正常,但需要booleanonDestroy设置为false,但碎片没有被破坏。意思是,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); 

我有一个tabel选项来保存一些设置。这当然也可以通过共享偏好来完成。

+0

应用主题作品。这只是我的碎片重新启动后立即关闭的问题。例如,我无法再访问列表视图。 – Leandros 2012-03-13 21:15:30

+0

我不能重新查询listlayout。这让我发疯。 :D – Leandros 2012-03-13 22:23:38

+0

然后我不确定你的意思。你能改说这个问题吗?请记住:如果您重新启动,您应该完成根活动。然后,就像关闭应用程序并稍后再启动它一样。如果有可能发布一些代码,错误在你的意见。 – Dante 2012-03-14 13:52:39

相关问题