java - ActionBarSherlock 重新启动以应用主题会触发错误的生命周期方法

标签 java android fragment android-actionbar actionbarsherlock

我使用带有 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);

应用程序正常关闭,但如果应用程序再次启动,我的 fragment 的整个生命周期方法都会被调用。一切工作正常,但所需的 boolean 值在 onDestroy 中设置为 false,但 fragment 并未被销毁。意味着, 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);

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

关于java - ActionBarSherlock 重新启动以应用主题会触发错误的生命周期方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686912/

相关文章:

java - 如何通过组合键的哈希码来计算 Pojo 的哈希码

java - 从 C++ 调用 java 代码 : exception java. lang.NoSuchMethodError

android - 如何将 TextView 的值转换为整数

java - 扫描条形码时出错 Mobile Vision API?

android - TextView 链接在我的模拟器 fragment 中不起作用

java - 使用 LocalDateTime 的“AttributeConverter 和显式类型不能应用于同一属性”

java - 防止两个用户从不同的 session 提交相同的表单数据

java - 如何使用终端获取Android设备上所有应用程序的列表

android - 由 : android. view.InflateException: Binary XML file line #11: Error inflating class fragment 引起

android 抛出 InflateException 二进制 xml 文件行 : Error inflating class fragment