它可以保留一个Fragment活动之间?
假设我在左侧放置A了片段活动,在右侧放置了F_Left片段F_Right.如果我想发布一个新的活动并保持片段F_Left......我该怎么做?
我可以F_Left在活动之间保留片段状态吗?
请注意,我想启动一个新的Activity,因为Fragment F_Left是我的应用程序菜单,Fragment F_Right完全改变了用户操作的上下文...而且我的应用程序有很多操作,所以每次操作都有一个Activity是有意义的.
我知道它可以保留Fragment在一个内部Activity,但由于Fragment生命周期与容器密切相关,Activity我不知道这是否可能保持Fragment活动之间的状态.
android android-fragments android-3.0-honeycomb android-activity
首先,我的应用程序具有以下结构:
SpashActivity -> MainActivity -> switching between many fragments
Run Code Online (Sandbox Code Playgroud)
我的应用程序使用SlideMenu在片段之间切换.我必须使用attach而不是replace保持片段状态.它看起来像:
public void switchContent(int index, String fragmentTag) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (fragmentManager.findFragmentByTag(fragmentTag) != mContent) {
if (!mContent.isDetached()) {
transaction.detach(mContent);
}
if (null == fragmentManager.findFragmentByTag(fragmentTag)) {
switch (index) {
case 0:
mContent = new CategoryFragment();
break;
case 1:
mContent = new BookFragment();
break;
case 2:
mContent = new BookDetailFragment();
break;
// etc
}
} else {
mContent = fragmentManager.findFragmentByTag(fragmentTag);
} …Run Code Online (Sandbox Code Playgroud) 当我按下Android的主页按钮并开始新的活动时,我正面临一些奇怪的问题.
我的堆栈跟踪如下
05-13 18:06:21.182: E/FragmentManager(5674): Failure saving state: active Fragment{411d96d8} has cleared index: -1
05-13 18:06:21.182: E/FragmentManager(5674): Activity state:
05-13 18:06:22.032: E/ACRA(5674): ACRA caught a IllegalStateException exception for com.itgurussoftware.android.dineback. Building report.
05-13 18:06:27.732: E/ACRA(5674): com.itgurussoftware.android.dineback fatal error : Failure saving state: active Fragment{411d96d8} has cleared index: -1
05-13 18:06:27.732: E/ACRA(5674): java.lang.IllegalStateException: Failure saving state: active Fragment{411d96d8} has cleared index: -1
05-13 18:06:27.732: E/ACRA(5674): at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1723)
05-13 18:06:27.732: E/ACRA(5674): at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:546)
05-13 18:06:27.732: E/ACRA(5674): at android.app.Activity.performSaveInstanceState(Activity.java:1113)
05-13 18:06:27.732: E/ACRA(5674): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1185) …Run Code Online (Sandbox Code Playgroud)