gpt4 book ai didi

android - onSaveInstanceState() 未调用 : why?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:50 24 4
gpt4 key购买 nike

问题:

我以编程方式将 fragment 添加到 LinearLayout。它出现在我的 Activity 中,太棒了。我打开设备 —> 配置更改:所有内容都被销毁以重新创建。但是,在调用 onDestroy() 之前,应该调用 onSaveInstanceState()。这是父 Activity 的情况,但不是我添加的 fragment 。为什么?

代码:

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>

我将 fragment 添加到父 Activity 中的 UI:

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

我覆盖了 fragment 的 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);
}

感谢您的宝贵时间! :-)

最佳答案

我遇到了同样的问题。有两个可能的答案:

  1. 在xml文件中添加 fragment ,如"fragment android:name="faragmentClass"etc."
  2. 手动调用 fragment 的onSaveInstanceState 方法。并在添加时在 onCreate 方法中手动恢复 fragment 的状态。

关于android - onSaveInstanceState() 未调用 : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7023458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com