gpt4 book ai didi

android - fragment 似乎有点矫枉过正?不可能有 MVC 架构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:13 26 4
gpt4 key购买 nike

几天前我开始使用 fragments,但它似乎适合我。我看不到复杂性大幅增加的合理优势。我不知道,如果我应该在我的 Activity 或我的 Fragment 中实现该功能。首先,我尝试将其放入 fragment 中,但这通常似乎是不可能的。

例如:单击按钮后,我有一个对话框作为用户输入。所以我通过监听器将按钮点击从 fragment 转移到 Activity ,在 Activity 中我打开了对话框。在对话框中,我启动了新功能(因此在 Activity 中实现)。Android 开发人员给出了在 fragment 中添加警告对话框的提示:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentAlertDialog.html

但是这个 fragment 仍然被实现并且与 Activity 重耦合(对话框的按钮 Action 在 Activity 中)。

所以模型和 View 很容易混淆。我看不出这种难以维护的静态代码有什么附加值(value)吗?!

您对fragment有什么看法和建议?

最佳答案

当使用 Fragments 时,您可以将它们视为 View,将 Activity 视为 Controller。在我个人看来,Fragments 是谷歌支持平板电脑的下意识 react ,现在我们坚持使用它们:(

我天天用fragments,当然能感受到你的痛苦。当我第一次读到它们时,我心想,“这真的很酷”,但在使用它们之后,它们在很多方面都有不足,但主要是因为我会错误地使用它们:(

以下是我遇到的一些陷阱...

  1. 不要在 fragment 布局中使用 onclick,因为处理点击的是 Activity 而不是 Fragment .如果您使用该属性,稍后您在另一个 Activity 中使用该 fragment ,那么您必须记住将 onclick 方法添加到该 Activity以及。因此,使用 findViewById,然后在 fragment 的 onCreateView 中手动附加点击处理程序。

  2. 与其他Fragment通信时,使用Activity作为 Controller 来定向消息。 (很多例子说明如何使用接口(interface)来做到这一点)。这里的关键是,如果您在一个设备上运行多个 fragment ,其中一个 fragment 将直接与另一个 fragment 通信,那么您会遇到一些奇怪但可预测的行为。例如,如果 Fragment A 直接更新了 Fragment B 中的 View ,但 Fragment B 不可见(因为你已经替换了它——考虑一部手机),那么当 Fragment B 可见时,View可能不会更新,因为 View 已重新创建。因此,如果您更新 Fragment,请务必更新 fragment 中的数据,然后更新 onCreateView 中的 View 部分,当 fragment 再次可见(即,您弹出了当前 fragment ,现在显示的是前一个 fragment )

  3. 不要仅使用 fragment 构建完整的应用程序。而是像往常一样构建应用程序,使用 Activities 然后处理 Fragment 有一个美化的 View (它是)。即,设计 App,使您有多个 fragment 和多个 Activity,并且某些 Activity 可能使用多个 fragment 。

我对 fragments 的第一个想法是,我认为使用 fragments 和一个 Activity 来构建一个完整的应用程序会很棒……我最终完成了这个应用程序,但我在使用这种方法时遇到了很多问题。我的下一个方法是使用多个 fragment 和多个 Activity ,而且效果要好得多。

底线是,如果您将 fragment 用作 View , fragment 会很棒,但如果您开始尝试像 Activity 一样使用它们,那么您将遇到问题:(想想Activiy -> Fragment 作为Controller -> View

除了 Activity Lifecycle 之外,我还建议您阅读并理解 Fragment Lifecycle(Pro Android 4 有一张很好的图片来表示它),这样您就可以避免数小时的痛苦:)

关于android - fragment 似乎有点矫枉过正?不可能有 MVC 架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859241/

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