是否有在单个活动中处理多个片段的 Android 设计模式?
Posted
技术标签:
【中文标题】是否有在单个活动中处理多个片段的 Android 设计模式?【英文标题】:Is there an Android design pattern to handle multiple fragments in a single activity? 【发布时间】:2016-08-19 18:23:58 【问题描述】:我在工作中继承了一些代码,我对一些实现有疑问。我正在处理的应用程序有一个包含大约 15 个不同片段的 Activity。 Activity中处理这些片段的逻辑大致可以总结为如下伪代码:
if (button_1 selected)
load fragment_1;
else if (button_2 selected)
load fragment_2;
else if (button_3 selected)
load fragment_3;
...and so on x15ish
我的问题是:是否存在某种 android 设计模式来处理此类情况?代码有效;但是,我对巨大的 if/else 或 case 语句不太满意。我看到了这个question,它似乎与我遇到的问题非常相似。我在互联网上进行了大量搜索,但没有找到此类场景的示例或最佳实践。
如果有人能指出我正确的方向或有一些建议;那太棒了。谢谢!
【问题讨论】:
你检查过这个developer.android.com/intl/zh-cn/training/basics/fragments/… 吗? 您通常没有 if-else 链,通常您使用选项卡更改片段或每个片段的 onClick 方法 @KhizarHayat,是的,我已经完成了相当一部分阅读片段的工作,并且在很多项目中都使用了它。但是,在这种情况下,我从未真正看到过这么多片段包含在单个活动中并在 if/else 语句中实现。 @Nanoc,为简单起见,我对实现进行了伪编码;但是每个按钮都有一个 onClick 方法,该方法通向 if/else 链来确定要加载的片段。我应该提到的一个额外细节是每个片段都是全屏的,它替换了容器 Activity 中的容器 FrameLayout。 您已决定如何解决您的问题? 【参考方案1】:对于布局中的每个按钮,您可以在 Activity 中分配一个方法:
<Button
...
android:onClick="startFragmentOne" />
然后实现这些方法:
public void startFragmentOne(View view)
//TODO
【讨论】:
【参考方案2】:您不应检查已选择的按钮,而应使用按钮的 onClickListener 来选择正确的片段。
buttonForFragment1.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
// select fragment 1 here
);
关于这个问题,这不是设计模式的级别,而是实现细节(习语),您正确地将您的代码识别为异味,我认为一个可能的解决方案不符合条件作为模式是上面的代码。
【讨论】:
以上是关于是否有在单个活动中处理多个片段的 Android 设计模式?的主要内容,如果未能解决你的问题,请参考以下文章