0

我使用SherlockFragmentActivity带有 3 个标签的 a。这些选项卡中的每一个都包含一个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是,错了。

有没有办法解决?我做错什么了吗?

4

1 回答 1

1

您必须将值保存在某处,例如在数据库或共享首选项中。

在应用之前,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);

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

于 2012-03-13T17:28:08.733 回答