繁体   English   中英

片段savedInstanceState始终为null

[英]Fragment savedInstanceState is ALWAYS null

我已经静态创建了一个片段(通过XML)。 我试图将最后显示的值存储在捆绑中,并在下次启动应用程序时将其显示。 但是,我无法使其正常工作。 由于某种原因, savedInstanceState始终为null。

public class DistanceSetterFragment extends Fragment implements SharedPreferences.OnSharedPreferenceChangeListener { 
    Distance distance = new Distance();

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        if (savedInstanceState!=null )
        {
            Log.d(this.getClass().getName(),"onCreate savedInstanceState is NOT null");

        }
        else
        {
            Log.d(this.getClass().getName(),"onCreate savedInstanceState is null");
        }


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        Log.d(this.getClass().getName(),"Distance "+distance);


        if (savedInstanceState!=null )
        {
            Log.d(this.getClass().getName(),"onCreateView savedInstanceState is NOT null");

        }
        else
        {
            Log.d(this.getClass().getName(),"onCreateView savedInstanceState is null");
        }


        return inflater.inflate(R.layout.fragment_distancesetter, container, false);
    }



    @Override
    public void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);

        if (distance!=null) {
            Log.d(this.getClass().getName(),"Saving DISTANCE_BEAN "+distance);
            outState.putSerializable(Constants.DISTANCE_BEAN, distance);
        }
        else
        {
            Log.d(this.getClass().getName(),"Distance BEAN IS NULL");

        }

        outState.putString("", "");

    }
}

以下是我的主要活动XML中声明的片段XML

<fragment
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/fragment_distancesetter"
    android:layout_below="@id/img_logo_main"
    android:name="com.webconfs.xyz.fragments.DistanceSetterFragment"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    />

如您所见-我尚未在Fragment类中设置setRetainInstance(true),并且-我的片段XML具有与之关联的ID android:id="@+id/fragment_distancesetter

刚才我遇到了同样的问题,这让我发疯,但事实证明,每次旋转时,片段只是被重新添加到活动中。 您没有添加“活动”的代码,但是您可能想检查一下情况并非如此,因为它很容易被忽略并且可以解释您的问题。

当您将片段静态地放入活动中时,片段管理器将始终创建一个新片段并将其附加到活动中。 restoreInstanceState()方法将永远不会被调用。 如果要执行此操作,可以将状态保存到活动的还原方法中,并将活动的保存状态放入片段中。 或动态创建片段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM