Android: fragment 之间跳转的正确方式

标签 android design-patterns android-fragments

这是一个设计问题,而不是技术问题。

一般情况:我希望 Fragment 中的 UI 事件进行 Activity 范围的更改。

具体案例:我有两个 fragment ,托管在同一个 Activity 中。当用户单击其中一个 fragment 中的按钮时,我希望将其替换为另一个。

但是,我不想让我的 Fragments 触及我的 Activity 。我可能想稍后更改行为(也许,在更大的屏幕上,显示两个 fragment 而不是替换第一个 fragment ),并且我不希望我的 fragment 代码具有这种逻辑。

我所做的是在我的 fragment 中实现一个 Listener 类,它将事件报告回 Activity。这样,如果我想使用另一个具有不同显示行为的 Activity 类,我可以只更改监听器并保持 Fragment 代码不变。

这是一个好方法吗?是否有标准的良好做法或更好的设计模式?

最佳答案

推荐使用监听器在 Fragment 和您的 Activity 之间进行通信。

查看 Android documentatin section信息。长话短说,他们只是通过 Activity 类实现了一个监听器接口(interface),并将 getActivity() 结果转换为一个 fragment 给监听器。

根据我的个人经验,这非常方便,因为您可以:

  1. 轻松切换底层 Activity (例如,您将整个 fragment 托管在包装器 Activity 中以在 3.0 之前版本中兼容,并在 11+ 中将此 fragment 与其他 fragment 一起托管)
  2. 轻松控制包装器 Activity 是否支持回调。只需检查它是否实现了监听器,如果没有,则执行您的应用特定操作。

关于Android: fragment 之间跳转的正确方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7322619/

相关文章:

android - 使用 RN 和 expo 更改 android 上的导航栏?

用案例选择

python - 由于动态变量,在 Python 中高效地创建列表

design-patterns - 设计模式和框架有什么区别?

java - 单击 ListItem 后如何更改 fragment 布局?

android - 使用 PageTransformer 时递归进入 executePendingTransactions

java - Braintree 与 Android Eclipse 项目的集成

android - Android与WebSocket的连接挂起

android - 如何将自定义类转换为 lambda?

android - fitSystemWindows 以编程方式实现状态栏透明度