3

好的,我知道我可能想错了,但是...

A)我有活动 A 加载片段 F1,它加载片段 F2。F2 执行一个应该导致它关闭的操作,然后 F1 根据它的关闭方式执行某个操作。

B)现在因为我还支持单个窗格,非片段,版本 F1 也通过 startActivityForResult 调用间接加载 F2。这意味着当 F2 的包装器活动完成时,F1 会收到一个 onActivityResult 调用,并且 F1 可以做它需要做的事情。

但是,我正在努力寻找实现我想要的 (A) 的最佳方法。我让 F2 回调活动 A 以将其从堆栈中弹出。然后我是否应该考虑将消息传递给 F1 以完成它需要做的事情?或者(我想 F1 可能负责将 F2 从堆栈中弹出)。

我想知道的是,在通过父活动来回传递消息方面,我是否走在正确的轨道上,或者是否有更直接的方式让 F1 响应 F2 执行需要关闭它的操作,然后 F1 执行它需要做的。

提前致谢。彼得。

4

2 回答 2

7

我有活动 A 加载片段 F1,它加载片段 F2

恕我直言,片段不应加载其他片段。活动根据可用的屏幕空间加载片段。片段不应该知道也不关心当前活动中是否存在任何其他片段,或者其他片段是否在其他活动中。

我让 F2 回调活动 A 以将其从堆栈中弹出。然后我是否应该考虑将消息传递给 F1 以完成它需要做的事情?

是的。

我想知道的是,在通过父活动来回传递消息方面,我是否走在正确的轨道上,或者是否有更直接的方式让 F1 响应 F2 执行需要关闭它的操作,然后 F1 执行它需要做的。

我什至不会让 F1 知道 F2 的存在,反之亦然。当用户在 F1 中做了一些应该导致主要上下文转移的事情(例如,显示一些其他片段/活动)时,F1 应该让托管活动知道,也许通过在 F1 注册的侦听器接口(以支持多种可能的托管活动) . 然后该活动将安排 F2 出现在它自己的活动中或另一个活动中。同样,当 F2 结束时,它会通过侦听器接口通知其托管活动,并且该活动可以将控制路由回适当的位置。

我对您的整个“F2 执行的操作应该导致它被关闭”的方法持怀疑态度,除非 F2 是DialogFragment.

于 2011-05-13T19:21:39.890 回答
7

如果您的片段紧密联系在一起,请不要在单独的活动中运行它们。对于单窗格情况,您只需在一个活动中切换片段。

否则,如果您确实想在活动之间分离它们,则需要使用onActivityResult()模型来传播结果,在双窗格情况下,只需对onActivityResult()第一个片段进行第二次调用即可“模拟”它。请注意,Fragment.setTargetFragment()其中包含一个请求代码参数以促进此操作。

于 2011-05-13T20:14:02.597 回答