onSaveInstanceState()没有被调用:为什么?

7

问题:

我以编程方式向LinearLayout添加了一个片段。它出现在我的活动中,很好。 我转动设备 -> 配置更改:一切都被销毁并重新创建。但是,在调用onDestroy()之前,应该调用onSaveInstanceState()。对于父活动来说是这样的,但对于我添加的片段却不是。为什么?

代码:

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/parent_LL"
android:stuff="myStuff"
>

<LinearLayout
    android:id="@id/categories_activity_LL1"
    android:stuff="myStuff" />

<LinearLayout
    android:id="@id/categories_activity_LL2"
    android:stuff="myStuff" />
</LinearLayout>

我将片段添加到父活动的用户界面中:

ft.add(container1, categories, CatFragIds.CATEGORIES.toString()).commit();

我重写了我的片段的 onSaveInstanceState() 方法:

@Override
public void onSaveInstanceState(Bundle outState) {

    // Récupère extensible
    boolean extensible = ((CategoryAppsListView) this.getListView())
    .isExtensible();

    mState.setExtensible(extensible);

    // Transmet l'état de CategoriesListElems
    FragmentManager fm = getFragmentManager();

    @SuppressWarnings("unchecked")
    FragRetainObject<CategoriesListElemsState> retainedState = 
    (FragRetainObject<CategoriesListElemsState>)
    fm.findFragmentByTag(CATEGORIESLISTELEMS_STATE+"_"+this.getTag());

    if( retainedState == null) {
        retainedState = 
        FragRetainObject.<CategoriesListElemsState>newInstance(mState);

        fm.beginTransaction()
        .add(retainedState, CATEGORIESLISTELEMS_STATE+"_"+this.getTag()).commit();
    }
    else retainedState.setRetainObj(mState);

    super.onSaveInstanceState(outState);
}

谢谢你的时间!!:-)

更新:应该不要在onSaveInstanceState()中添加保留mState的代码片段。这样做会由于事务的异步而导致与onSaveRetainState()回调函数产生问题。因此,可以在onCreate()方法中完成该操作。 - PHF
2个回答

1

我曾经遇到过同样的问题,有两种可能的解决方案:

  1. 在XML文件中添加片段,例如“fragment android:name="faragmentClass"等”。
  2. 手动调用片段的onSaveInstanceState方法。并在添加片段时,在onCreate方法中手动恢复片段的状态。

我该如何实现你的第二个建议?我似乎找不到Bundle outState - kbluue

-2

你需要将配置更改放置在AndroidManifest.xml文件中的方向和键盘部分。


你所指的是自己处理配置更改。http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接