2014-04-22 82 views
0

很多线程提出了如何运行代码或获取片段可见性的问题。 但我想知道为什么Fragments:onResume()和onStart()对用户不可见,尽管文档声明它应该对用户可见。片段可见性

来自:http://developer.android.com/reference/android/app/Fragment.html#Lifecycle

在onStart()使该片段给用户可见(根据它的含活性被启动)。 onResume()使片段与用户交互(基于其包含的活动正在恢复)。

http://developer.android.com/reference/android/app/Fragment.html#onResume() 和在onStart()对于这个问题,清楚地描述:

时,这个片段用户可见和有效运行的调用。这通常与包含Activity的生命周期的Activity.onResume相关联。

虽然我清楚地看到没有片段,直到onResume完成后。所以问题依然存在:'为什么'只是onResume后'可见'的片段。而不是从文档的onStart? 哦,并展开这一点:我不使用ViewPager ..只是一个简单的Activity-Fragment模型。

希望任何人有这方面的一些英特尔...

[更新*]我已经添加了一个活动,并显示问题一个片段的样本项目。对于任何试图;-)

https://www.dropbox.com/s/08noqvmq7sjwppb/fragmentUserVisibilityTest.zip

回答

0

也许,你有你的onStart()一个长期运行的操作恰好在主线程。在这种情况下,除非此操作结束,否则您不会看到任何内容在调用onResume时发生的情况。考虑使用AsyncTask进行长时间操作。

onStart()被调用时的片段是大约要显示,当片段即将被interactibleonResume()被调用。这与活动相同。

onStart()onResume()本来是没有用的,如果他们被称为后一个片段变为可见/ interactible。

+0

感谢您的意见;虽然很可能会是这种情况。 onStart()或其他方法没有长时间运行的操作。 您认为这可能与某件事有关吗?: fragmentTransaction.replace(R.id.container,fragment); – Ronnie

+0

通常,如果savedState == null(否则片段已经存在),它们将在activity的onCreate中替换()。commit()。此外,您可以在片段的onCreate中尝试setRetainInstance(true),以便片段保持在配置更改之间。不知道这是否有帮助。 –

+0

我也会试试这个。现在我已经上传了一个示例项目,供任何人试用。这显示了我所看到的。 (查看原始问题) – Ronnie