Android 片段保存实例状态,但从不重新加载它

Android 片段保存实例状态,但从不重新加载它,android,android-fragments,android-savedstate,Android,Android Fragments,Android Savedstate,我在重新加载碎片状态时遇到问题 架构如下所示: 我有一个活动A,带有片段F。使用选项菜单Activity A打开设置活动及其设置片段(使用startActivity())。在这段时间内,片段F执行他通常的操作,调用onSaveInstanceState,onPause,onStop。这里一切都好 一旦用户点击后退按钮,设置活动将关闭,片段F应重新初始化。问题开始了。片段F不会再次调用onCreateView。它也不调用activitycreated。调用的第一个方法是onStart 那么我在哪里

我在重新加载碎片状态时遇到问题

架构如下所示:

我有一个
活动A
,带有
片段F
。使用选项菜单
Activity A
打开设置活动及其设置片段(使用
startActivity()
)。在这段时间内,
片段F
执行他通常的操作,调用
onSaveInstanceState
onPause
onStop
。这里一切都好

一旦用户点击后退按钮,设置活动将关闭,
片段F
应重新初始化。问题开始了。
片段F
不会再次调用
onCreateView
。它也不调用activitycreated。调用的第一个方法是
onStart

那么我在哪里可以获取我的savedInstanceState包,以便重新初始化我的自定义成员变量?

为什么
片段F
成员变量(指向片段中的某些视图)仍然(或者再次?)初始化。

谢谢你的帮助

以下是一些代码片段:

片段F

活动A


你回来后的状态是正确的,你只是想知道为什么?我的理解正确吗?不,国家不正确。我对视图的引用是活动的,但对自定义对象的引用是空的,因此我需要重新初始化它们哪些是对视图的引用,哪些是对自定义对象的引用?嗯,
波形
序列器
路径
是我的自定义对象。然后我引用了一些与ButterKnife绑定的按钮。实际上,您描述的行为都是预期的,除了关于您对自定义对象的引用的部分,您确定它们可能已设置吗?也许您应该在saveInstanceState中添加额外的日志,以查看引用是否为空。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    Log.d(this, "onCreateView");
    return Butterknife.bind(this, inflater.inflate(R.layout.fragment_video_mockup, container, false));
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    Log.d(this, "onActivityCreated");
    super.onActivityCreated(savedInstanceState);
    if(savedInstanceState != null)
    {
        Log.d(this, "... loading from saved instance");
        this.initFromArgument(savedInstanceState.getBundle(ARG_SAVED_STATE));
    }
    else if(this.getArguments() != null)
    {
        Log.d(this, "... loading from external arguments");
        this.initFromArgument(this.getArguments());
    }
}
@Override
public void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
    Log.d(this, "... saving");
    outState.putBundle(ARG_SAVED_STATE, createArgument(this.waveform, this.sequencer, this.paths));
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    Log.d(this, "options menu selected (" + item.getTitle() + ")");
    switch(item.getItemId())
    {
        case R.id.action_settings:
            this.startActivity(new Intent(MainActivity.this, SettingsActivity.class));
            break;
        case R.id.action_feedback:
            this.onFeedbackClick();
            break;
        default:
            throw new AssertionError("wrong option item selected");
    }
    return super.onOptionsItemSelected(item);
}