0

如果没有互联网,我有一个片段在 OnCreateView 中执行 startActivityForResult() 调用。在 NoInternet Activity 中有一个重试按钮,用于完成()该活动(所以我可以再次检查连接)。当活动结束时,片段的 OnCreateView 永远不会被调用(因为主机 Activity 的 OnCreate() 永远不会被调用)并且我最终不会再检查是否有互联网。

现在解决这个问题的一个简单方法是检查主要活动(托管片段)的 OnStart() 中是否有互联网。

但我想知道:有没有办法在完成()使用 startActivityForResult()启动的 Activity 之后强制 OnCreateView?

4

2 回答 2

1

我不确定您究竟是如何使用相关片段/活动的,但听起来当您为新活动调用 startActivityForResult() 时,主要活动的片段视图没有被破坏。在某些情况下,这种行为是正常的,这意味着您的片段只会被停止或暂停。因此,在 OnStart() 或 OnResume() 中进行网络检查将是正确的用法。

于 2013-07-25T20:00:03.587 回答
1

我认为您的问题是对片段生命周期的理解。如果您在 Fragment 上调用 startActivityForResult(),它将在 Fragment 包含的 Activity 上执行。现在活动进入暂停状态,然后停止状态,片段也将进入。如果您完成“ResultActivity”,则状态 Started 和 Resumed 将在 Activity 和 Fragment 上传递。

所以,如您所说,只需将您的连接检查和您的 startActivityForResult() 调用移至 onStart()。

无需为 Fragment 创建新视图。如果您想以编程方式更改视图,您可以在 onStart() 和 onResume() 中执行此操作。

但是不要仅仅因为可以在另一个回调中轻松调用的方法调用而破坏生命周期。

于 2013-07-25T20:00:30.573 回答