想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
我知道这个问题可能会被问到很多,但是我想针对我正在构建的那种应用程序得到一个答案。我正在创建一个Android应用程序,它基本上是一个食谱搜索应用程序,它允许用户选择配料,食物类别和准备时间,并且该应用程序会找到适合用户搜索的食谱。
成分,类别和时间都有单独的“页面”,我为每个页面创建了一个活动。用户首先选择配料,然后单击下一步,开始类别活动,然后再次单击下一步,出现准备时间活动。然后,当他们单击“搜索”时,我将进行另一项活动以获取结果,并且当用户单击结果中的一个食谱时,将启动另一个用于显示食谱的活动。
因此,我有以下活动,其中每个活动按以下顺序开始下一个活动:
成分活动
类别活动
时间活动
结果活动
RecipeActivity
我做了一些阅读,发现我应该使用片段。我的计划是更改我的应用程序,使其具有一个选项卡式活动,其中包含三个用于成分,类别和时间的选项卡,底部带有一个“搜索”按钮,该按钮显示在所有三个片段中,这使用户可以轻松地在选项卡和搜索之间切换从他们当前正在查看的任何标签中。至于结果和显示食谱,我正在考虑保留其各自的活动。 “搜索”按钮将启动ResultActivity,然后单击单个搜索结果将启动RecipeActivity并显示用户单击的配方。
另外,我计划添加“按配方标题搜索”功能。用户将可以使用操作栏中的菜单按钮在这两种搜索模式之间切换。我假设每种搜索模式都必须有一个单独的活动,所以这就是我打算做的事情。
我的想法是正确的方法吗?还是我应该只对整个应用程序进行一项活动,而其余的活动是否只包含片段?
最佳答案
对我而言,关于活动或片段的所有决策都与(1)UX(2)可管理性(3)组件之间的通信成本等相关。
让我通过示例介绍一些决策。
是否需要从外部启动屏幕(共享意图)?Activity
更好,因为可以直接从AndroidManifest提供的内容中打开它。
屏幕是否需要逐页查看(食谱页)?Fragment
更好,因为Fragment + ViewPager提供灵活的分页功能。此外,某些Android设备或主题编辑器会覆盖“活动”打开效果,因此,如果我们以“逐个活动”的方式实现翻页动画,则动画将无法按预期运行。
屏幕是否使用StartActivity
执行“相机”或“照片”意图?Activity
更好,因为当应用程序从Camera应用程序还原时,OnActivityResult
难以管理内部片段。因此,“撰写帖子”屏幕可能是一个单独的活动的好例子。
无论屏幕开/关(计时器),屏幕都必须运行吗?Activity
更好,因为在没有Activity-Fragment dancing的情况下它可以更快更轻地显示。
屏幕是否具有一种主从层次结构?Fragment
更好,因为我们可以准备平板电脑的布局。
屏幕会消耗大量内存吗?Activity
更好,因为我们可以只关注活动而不是内部片段内存使用情况。
屏幕上嵌套的片段是否超过3深度?Fragment
,勉强。片段之间的通信不稳定,并且活动片段桥接/跳舞始终令人头疼1 2。我们可以降低复杂性,但是Activity-inside-Fragment-inside-ViewPager-inside-fragment -...很难实现可管理性。
专业的Android开发人员建议将多个Fragment
与单个Activity
结合使用,但我们可以决定创建更多的Activity,以简化管理并更快地理解。
对于您的情况,我想实现以下组件。
带有碎片的MainActivity:成分,类别,食谱。
带有片段的ResultActivity:搜索及其结果是一种主从视图。
TimerActivity:在单个Activity中运行应该很好。
RecipeActivity:如果每个食谱都有自己的ID,并且可以作为永久链接共享,则您的应用可以通过RecipeActivity直接打开食谱页面。而且,即使您的应用程序已从关闭状态恢复或从其他应用程序状态切换回去,显示食谱也可能更好。