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

标签 android android-fragments

我有 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/

相关文章:

Android 文件系统日志

android - 子 fragment 替换父 fragment 根布局

java - 对于选项卡式 Activity 中使用 fragment 的 GridView ,适配器为空

java - 在 Thread.sleep 之前强制屏幕输出

php - PHP GET 方法中的多个请求

android - 将新数据附加到 JSON 数据

java - 如何使用 setArguments/getArguments 创建 fragment

android - 为什么 fragment 中的生命周期方法是公开的,而 Activity 的生命周期方法是 protected ?

java.lang.ClassCastException : cast to created interface issue?

android - 设置一个 spannable 字符串不适用于简单的 Textview