假设我有一个包含FragmentActivity,FragActivityA和FragActivityB两个实例的应用程序,以及两个ListFragments,FragA和FragB。
在纵向中,FragActivityA呈现FragA,并在选择时启动FragActivityB呈现FragB。
FragA应该为ListView实现OnItemClickListener(某些网络业务是在印刷时执行的)还是FragActivityA? FragA应该显示DialogFragment,还是应该回拨给FragActivityA来显示它?
在横向中,FragActivityA同时呈现FragA和FragB。现在,如果上面的答案是肯定的,那么FragActivityA需要包含大多数FragActivityB方法,复制大部分代码。如果答案为否,则FragA或FragB需要自己呈现和处理DialogFragments。
我正在寻找关于我应该在哪里编写大部分代码的一些指导(我的直觉是在片段中),但显示DialogFragments的片段对我来说似乎很奇怪。
答案 0 :(得分:1)
假设我有一个包含FragmentActivity,FragActivityA和FragActivityB两个实例的应用程序,以及两个ListFragments,FragA和FragB。
我有一个应用程序,包含两个FragmentActivity,FragActivityA和FragActivityB实例,以及两个ListFragments,FragA和FragB。
哦,不,等等,你的意思并不是说我......: - )
FragA应该为ListView实现OnItemClickListener(某些网络业务是在按下时执行的)还是FragActivityA?
FragA
应覆盖onListItemClick()
。那时发生的事情取决于所涉及的业务逻辑。您指出“某些网络业务是在按下时执行的”,这听起来就像您向IntentService
发送命令或可能产生AsyncTask
。我目前的想法是,这些事情也会由FragA
完成,虽然我对此并不那么自信,特别是因为我对你的应用程序了解不多。
FragA应该显示DialogFragment,还是应该回拨给FragActivityA来显示它?
理想情况下,都不是。设计您的UI以将用户锁定在活动的件之外,而不是整个活动。 IOW,尽量减少对话框的使用。
无论如何,我的一般指导是片段处理所有限于片段本身范围(及其基础数据模型)的工作。超出多个片段的事件应该波及到活动,然后负责将事件传递给另一个现有片段(如果它由此活动加载)或者启动另一个活动。在MVC术语中,您的片段是您的控制器,其中活动处理片段之间的编排事件(因此,如果需要,可以在活动之间)。
现在,如果上面的答案是肯定的,那么FragActivityA需要包含大多数FragActivityB方法,复制大部分代码。
听起来他们应该继承一个实现共同逻辑的公共AbstractFragActivity
。