【发布时间】:2013-08-19 09:10:28
【问题描述】:
我遇到了以下问题。我试图在配置更改时保留我的片段之一的布局。因此我想,我可以使用setRetainInstance(true)。然而,事实证明它不起作用。问题是,每次配置更改时都会调用onCreateView,以便我的布局重置为初始状态。
我可以做些什么来保留我的布局?
我是否必须将我的代码移动到 onCreateView 内的其他地方?
请注意:我不能使用 android:configChanges="orientation" 清单中的 hack,因为我的标签托管活动托管了更多标签。我只想在一个标签中保留状态。
这是我的一些代码:
public class MyFragment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
setRetainInstance(true);
View rootView = inflater.inflate(R.layout.abc, container, false);
// Some more code that was omitted ..
return rootView;
}
}
【问题讨论】:
-
您不应该在 可见 片段上使用
setRetainInstance(),因为如果重新创建拥有的活动,您将泄漏对前一个活动的引用。 -
@AlexMDC 我应该怎么做才能将我的布局保留在可见片段中?
-
您所描述的内容应该会自动工作,即使片段是与拥有的活动一起重新创建的。如果您删除
setRetainInstance()调用并让片段恢复到其默认行为会发生什么?视图恢复时布局有什么问题? -
问题在于配置更改不会保留运行时设置的数据
-
在这种情况下,您需要自己在配置更改期间保留数据。在你的活动中使用
onRetainNonConfigurationInstance(),或者使用加载器来持久化数据,或者使用你称为setRetainInstance()的不可见片段(即没有视图)。涉及一些管道,但这是 Android 方式:)
标签: android view android-fragments oncreate