0

私はSherlockFragmentActivity3つのタブでを使用します。これらの各タブには、が含まれてい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 に答える