片段ViewState是否已在onStart中恢复? [英] Fragment ViewState restored in onStart?
问题描述
当方向改变时,片段 viewState
仅在 onStart
中恢复.在 onAttach
, onCreateView
, onViewCreated
和 onActivityCreated
之后,甚至在 onCreate
之后.为什么?为时已晚.
When orientation changes, fragment viewState
restored only in onStart
.
After onAttach
, onCreateView
, onViewCreated
and onActivityCreated
and even after onCreate
.
Why? This is too late.
我需要基于一些TextView值将数据库查询结果填充到ListView中.目前,我尝试在 onViewCreated
中执行此操作.但是,此步骤无法恢复视图状态.
I need to populate db query results to ListView based on some TextView value. Currently i try to do this in onViewCreated
. But view state isn't restored at this step.
我可以提早恢复吗?还是如何克服这个问题?请提出任何想法.
Can i force restore early? Or how to overcome this problem? Any ideas, please.
PS:我使用actionbarsherlock和相关的android support-v4 r7库
PS: i use actionbarsherlock and dependent android support-v4 r7 library
PS2:如果我要在 onStart
中加载数据,则在 onStop
之后恢复片段时,它将执行其他查询(我可以通过添加一些布尔值来解决此问题isLoaded
-但这不是最佳解决方案).
PS2: if i will load data in onStart
then it will do additional queries when fragment is resumed after onStop
(i can solve this by adding some boolean isLoaded
- but this isn't best solution).
推荐答案
在Android API> = 17(Android 4.2 Jelly Beans)中,有一种方法: public void onViewStateRestored(捆绑保存的InstanceState)
In Android API >= 17 (Android 4.2 Jelly Beans) there is a method:
public void onViewStateRestored (Bundle savedInstanceState)
在 onStart()
之前和 onActivityCreated()
之后调用,如
which is called before onStart()
and after onActivityCreated()
as mentioned in docs.
在Android API中<17没有这种方法.但是有两种解决方案:
In Android API < 17 there is no such method. But there are two solutions:
- 初始化
Fragment
时不要依赖视图状态,并将所有必需的初始化状态另存为Fragment
状态(即,覆盖Fragment#onSaveInstanceState()
).稍后,您可以在onCreate()
,onCreateView()
或onViewCreated()
中恢复片段状态. - 按照问题指定的方法在
onStart()
中执行初始化.
- Don't rely on view state while initializing
Fragment
and save all required initialization state asFragment
state (i.e. overrideFragment#onSaveInstanceState()
). Later you can restore fragment state inonCreate()
,onCreateView()
oronViewCreated()
. - Perform initialization in
onStart()
as specified in question.
这篇关于片段ViewState是否已在onStart中恢复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!