如何在屏幕旋转时保存碎片?

6

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);... CustomFragment fragment; if (savedInstanceState != null) { fragment = (CustomFragment) getSupportFragmentManager().findFragmentByTag("customtag"); } else { fragment = new CustomFragment(); getSupportFragmentManager().beginTransaction().add(R.id.container, fragment, "customtag").commit(); } ...} - Viral
通过我发布的上述代码,您可以保存片段状态。 - Viral
2个回答

13

在您的fragment的onCreate方法中尝试使用setRetainInstance(true);


1
我认为这将给我以下结果 - 我将保留片段中的所有内容,但需要保存该片段。 - Max Usanin
搜索时,我开始理解这是一些东西。您可以添加一些示例。 - Max Usanin

-1

您需要在AndroidManifest.xml中的android:configChanges中添加orientation。例如:

   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

请为我解释一下这是什么意思? - Max Usanin
在http://developer.android.com/guide/topics/manifest/activity-element.html中指出:列出活动将自己处理的配置更改。当运行时发生配置更改时,默认情况下会关闭并重新启动活动,但使用此属性声明配置将防止活动重新启动。相反,活动保持运行状态,并调用其onConfigurationChanged()方法。 - Aladin Q
是的,它可以工作,但为什么人们要使用 onSaveInstanceState 和 onRestoreInstanceState?也许这个链接可以解答:https://dev59.com/bGfWa4cB1Zd3GeqPlutc#12214737 - Max Usanin
这看起来很丑,但是它的功能非常棒!!!谢谢。 - Praween k
1
这个方法可行,但我并不推荐使用。请注意您的活动将被重新创建。因此,您的onPause()需要将您所需的任何内容存储到永久存储器中,以便在长时间存活期间保留它们。而旋转只需要您覆盖onSaveInstanceState并填充bundle即可。对于片段特别是旋转,setRetainInstance(true)实际上可以处理大多数人在旋转时想要的行为。 - Pork 'n' Bunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接