片段ViewState是否已在onStart中恢复? [英] Fragment ViewState restored in onStart?

查看:55
本文介绍了片段ViewState是否已在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:

  1. 初始化 Fragment 时不要依赖视图状态,并将所有必需的初始化状态另存为 Fragment 状态(即,覆盖 Fragment#onSaveInstanceState()).稍后,您可以在 onCreate() onCreateView() onViewCreated()中恢复片段状态.
  2. 按照问题指定的方法在 onStart()中执行初始化.
  1. Don't rely on view state while initializing Fragment and save all required initialization state as Fragment state (i.e. override Fragment#onSaveInstanceState()). Later you can restore fragment state in onCreate(), onCreateView() or onViewCreated().
  2. Perform initialization in onStart() as specified in question.

这篇关于片段ViewState是否已在onStart中恢复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆