gpt4 book ai didi

android - Fragment 将所有导航控制委托(delegate)给 Activity 是个好主意吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:14 26 4
gpt4 key购买 nike

灵感来自 Android developer guide我正在尝试编写代码,其中所有 fragment 都是独立的(在网络/逻辑方面)并且它们执行的任何操作(点击/点击)应该导致启动新的 Activity/fragment 将被委托(delegate)给 Activity (通过回调)。

一开始,这似乎是对的。但是现在,当我有超过 1 个这样的小部件的 fragment (需要 fragment 导航到新屏幕)时,它看起来像一团糟。我要么需要编写多个回调,要么需要在 Activity 中为在一个 fragment 上完成的不同操作做一些 switch-case 逻辑。

如果这种设计听起来很糟糕,那么在哪些情况下实现回调(如指南所建议的那样)是个好主意?

最佳答案

我不知道你是如何实现这些回调的。

解决这个问题的一种方法是使用契约模式:

  • 该 fragment 定义了一个 Contract 接口(interface),任何托管 Activity 都必须实现该接口(interface)

  • 当 fragment 想要将控制传递给 Activity 时,它会调用该接口(interface)上的方法

Jake Wharton 在 a GitHub gist 中对此进行了规范的实现.唯一没有显示的是托管他的 MyCoolFragment 的 Activity 需要实现 MyCoolFragment.Contract 接口(interface)。

这假设每个 fragment 都有不同的事件来引发 Activity ,因此需要自己的接口(interface)。如果您有几个具有共同特征的 fragment ,您可以在一个接口(interface)上进行标准化,而不是在各处复制 Contract

还有其他方法(例如,建议使用消息总线的要点评论),但对于简单的 fragment -> Activity 通信,契约模式应该具有最少的开销,无论是在编码还是运行时实现方面。

不过,您将工作委派给可能导致更改另一个 fragment 的 Activity 的一般方法绝对是一个好方法。当您处理不同的屏幕设置(手机与平板电脑、单屏幕与在连接的屏幕上显示内容)时,它可以更轻松地处理 fragment 不同时出现在屏幕上的情况,这些 fragment 可能由不同的 Activity 托管电视等)。

关于android - Fragment 将所有导航控制委托(delegate)给 Activity 是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com