如何最好地将消息从一个 Fragment 传递到其父级(相当于 onActivityResult)

发布于 2024-11-07 07:02:50 字数 470 浏览 1 评论 0原文

好吧,我知道我可能以错误的方式思考这个问题,但是...

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

B) 现在,因为我还支持单窗格、非片段,所以版本 F1 还通过 startActivityForResult 调用间接加载 F2。这意味着当 F2 的包装器活动完成时,F1 会收到 onActivityResult 调用,并且 F1 可以执行其需要执行的操作。

然而,我正在努力寻找实现我想要的(A)的最佳方法。我让 F2 回调活动 A 以将其从堆栈中弹出。那么我是否应该考虑向 F1 传递消息以执行其需要执行的操作?或者(我认为 F1 可能负责将 F2 从堆栈中弹出)。

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

提前致谢。彼得.

OK I know that I may be thinking about this the wrong way but ...

A) I have activity A loading Fragment F1 which loads fragment F2. F2 performs an action which should result in it being closed and then F1 performing a certain action based on how it was closed.

B) Now because I'm also supporting a single pane, non-fragment, version F1 also loads F2 indirectly via a startActivityForResult call. This means that when F2's wrapper activity is finished F1 recieves an onActivityResult call and F1 can do what it needs to do.

However, I'm struggling to see the best way to implement what I want for (A). I have F2 calling back to activity A to pop it off of the stack. Should I then be looking at passing a message to F1 to do what it needs to do? Alternatively (I suppose F1 could be responsible for popping F2 off of the stack).

What I'm wondering is whether I'm on the right track with regards passing messages back and forwards via the parent activity or is there a more direct way of F1 responding to F2 performing something that requires it to be closed and F1 do what it needs to do.

Thanks in advance. Peter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两人的回忆 2024-11-14 07:02:50

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

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

If your fragments are closely tied together, just don't run them in separate activities. For the single pane case you can just switch fragments within one activity.

Otherwise, if you do want to separate them between activities, you need to use the onActivityResult() model for propagating results back, and in the dual-pane case "emulate" it by just having the second call onActivityResult() of the first fragment. Note that Fragment.setTargetFragment() includes a request code argument to facilitate this.

柠檬色的秋千 2024-11-14 07:02:50

我有一个活动 A 正在加载片段 F1,它会加载片段 F2

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

我让 F2 回调活动 A 以将其从堆栈中弹出。那么我是否应该考虑向 F1 传递消息以执行其需要执行的操作?

是的。

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

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

我对您的整个“F2 执行应导致其关闭的操作”方法有些怀疑,除非 F2 是一个 DialogFragment

I have activity A loading Fragment F1 which loads fragment F2

IMHO, fragments should not load other fragments. Activities load fragments, based upon available screen space. Fragments should neither know nor care whether any other fragment exists in the current activity, or if other fragments are in other activities.

I have F2 calling back to activity A to pop it off of the stack. Should I then be looking at passing a message to F1 to do what it needs to do?

Yes.

What I'm wondering is whether I'm on the right track with regards passing messages back and forwards via the parent activity or is there a more direct way of F1 responding to F2 performing something that requires it to be closed and F1 do what it needs to do.

I would not have F1 even know that F2 exists, or vice versa. When the user does something in F1 that should result in a major context shift (e.g., display some other fragment/activity), F1 should let the hosting activity know, perhaps via a listener interface registered with F1 (to support multiple possible hosting activities). The activity would then arrange for F2 to appear, either in its own activity or in another activity. Similarly, when F2 wraps up, it would let its hosting activity know via a listener interface, and that activity can route control back to the appropriate spot.

I am somewhat skeptical of your whole "F2 performs an action which should result in it being closed" approach, unless F2 is a DialogFragment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文