gpt4 book ai didi

android - 将 onSaveInstanceState 与 backstack 中的 fragment 一起使用?

转载 作者:IT老高 更新时间:2023-10-28 22:17:02 25 4
gpt4 key购买 nike

我有 fragment 保存在 FragmentManager 的后台堆栈中。保存每个 fragment 状态以使用成员变量更改方向,例如:

@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putLong("userId", mUserId);
outState.putString("username", mUsername);
}

我的问题是,如果方向发生变化,由于 backstack 中的每个 fragment 都通过 onSaveInstanceState 调用,我得到一个空指针异常,因为成员变量不再存在。

关于如何解决这个问题的任何想法?

最佳答案

您的成员变量可能不再存在,因为您的 Activity 中的 FragmentManager 与您的所有 fragment 一起死亡。

您还需要覆盖 Activity 类的方法 onSaveInstanceState,因为您需要在保存之前保存 Activity 状态 fragment 状态。

作为 documentation说:

There are many situations where a fragment may be mostly torn down (such as when placed on the back stack with no UI showing), but its state will not be saved until its owning activity actually needs to save its state.

更新

在您的 Activity onSaveInstanceStateonRestoreInstanceState 中,尝试保存您的 Fragment 引用,然后使用类似这个:

public void onSaveInstanceState(Bundle outState){
getFragmentManager().putFragment(outState, "myfragment", myfragment);
}
public void onRestoreInstanceState(Bundle inState){
myFragment = getFragmentManager().getFragment(inState, "myfragment");
}

如果你运气好,请告诉我! :-)

关于android - 将 onSaveInstanceState 与 backstack 中的 fragment 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15608709/

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