Fab*_*app 10 model-view-controller android design-patterns android-fragments
我几天前开始使用碎片,但它似乎对我有用.我没有看到复杂性大幅增加的合理优势.我不知道,如果我应该在我的Activity或我的片段中实现功能.首先,我试图把它放在碎片中,但这似乎是不可能的.
例如:单击按钮后,我有一个对话框作为用户输入.所以我通过侦听器从片段到活动转移了按钮单击,并在活动中打开了对话框.在对话框中,我启动了新功能(因此在Activity中实现).Android dev提供了在片段中添加警报对话框的提示:
但是这个片段仍然是实现的,并且与激活密切相关(对话框的按钮动作在活动中).
因此,模型和视图混合在一起.在这种难以维护的静态代码中,我没有看到额外的价值?!
您对片段的意见和建议是什么?
stu*_*ess 23
使用时Fragments
,您可以将它们视为View
和它Activity
一样Controller
.在我个人看来,Fragments是谷歌支持平板电脑的膝盖反射,现在我们坚持使用它们:(
我每天都使用碎片,我当然感觉到你的痛苦.当我第一次读到它们时,我心里想,"这真的很酷",但在使用它们后,它们在很多方面都不尽如人意,但主要是因为我会错误地使用它们:(
以下是我遇到的一些陷阱......
不要onclick
在片段布局中使用,因为它是处理点击的Activity
而不是Fragment
处理点击的.如果您使用该属性,稍后您在另一个中使用该片段Activity
,那么您还必须记住将该onclick
方法添加到该属性中Activity
.因此,使用a findViewById
然后手动附加片段中的单击处理程序onCreateView
.
与其他片段通信时,使用Activity
控制器来指示消息.(很多关于如何使用接口的例子).这里的关键是,如果您在设备上运行多个片段,其中一个片段将直接与另一个片段通信,那么您会遇到一些奇怪但可预测的行为.例如,如果片段A直接更新片段B中的视图,但片段B不可见(因为您已经替换它 - 考虑一个电话),那么当片段B可见时,则View
可能不会更新,因为它View
是重建.因此,如果您更新a Fragment
确保更新片段中的数据然后更新片段再次可见时调用的View
部分onCreateView
(即,您已弹出当前片段,现在显示前一个片段)
不要仅使用片段构建完整的应用程序.而是像平常一样构建应用程序,使用"活动"然后将其视为Fragment
具有美化视图(即它).即,设计应用程序,使您有多个片段和多个活动,一些活动可能使用多个片段.
我对片段的第一个想法是,我认为使用片段和一个活动构建一个完整的应用程序会很棒...我最终完成了应用程序,但是我使用这种方法遇到了很多问题.我的下一个方法是使用多个片段和多个活动,它变得更好.
最重要的是,如果你将它们用作一个片段是很好的View
,但如果你开始尝试像活动一样使用它们,那么你将遇到问题:(想想Activiy
- > Fragment
作为Controller
- > View
.
我还建议您阅读并理解片段生命周期以及活动生命周期(Pro Android 4有很好的图片来表示它),您将节省数小时的痛苦:)
片段提供视图逻辑,因此可以移植到其他活动.在大多数情况下,活动正在更多地转变为真正的控制器角色.在之前的Android架构中,视图逻辑和控制器逻辑被合并在一起,因为没有人将View子类化为View来实现他们的大多数应用程序.它们基本上在XML布局文件中进行布局,然后直接在Activity中拉出View对象.这意味着Activity正在注册点击监听器,关键监听器,拖动逻辑等,这通常是你在其他工具包中View的另一个子类中所做的.因为他们这样做意味着你刚刚编写的真正酷炫的多点触控手势ListView被卡在那个Activity中.现在,您希望在另一个Activity中再次使用它.那么你是SOL With Fragments你可以更容易地将这个逻辑从Activity转移到Fragment中.从技术上讲,您可以将其移动到自定义组件View中,但Fragments提供了另一个优势,即Fragments使您能够编写可在平板电脑和较小设备上运行的应用程序,同时改变每个应用程序的布局.理解它是如何工作的很棘手,但是单个Activity可以包含几个片段,每个片段具有不同的布局.自定义组件无法轻松完成的任务.加上自定义组件无法使用布局文件.您必须使用完全Java代码,而不是放弃使用Fragments.
我认为您提供的示例是设计Fragments的快速而肮脏的方法.您可以通过提取Fragment委派给的接口来轻松地提取后引用(此范围的嵌套范围).
归档时间: |
|
查看次数: |
4001 次 |
最近记录: |