有没有一种Android设计模式来处理单个活动中的多个片段?

5

我在工作中继承了一些代码,现在对其中的某些实现有疑问。我正在处理的应用程序包含一个活动(Activity),其中包含大约15个不同的片段(fragments)。处理这些片段的活动中的逻辑可以概括如下:

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语句并不感到太舒适。我看到了这个问题,它似乎非常类似于我正在遇到的问题。我在互联网上进行了相当多的搜索,但我没有找到此类情况的示例或最佳实践。
如果有人能指点我正确的方向或有一些建议,那就太棒了。谢谢!

你有查看过这个链接吗?http://developer.android.com/intl/zh-cn/training/basics/fragments/communicating.html - Khizar Hayat
通常情况下,您不需要使用if-else链,而是使用制表符来更改片段或为每个片段使用onClick方法。 - Nanoc
@KhizarHayat,是的,我已经花了很多时间阅读关于片段的内容,并在许多项目中使用过它。然而,在这种情况下,我实际上从未见过在单个活动中包含如此多的片段,并在if/else语句中实现。 - D Ta
@Nanoc,为了简单起见,我使用伪代码实现了它;但是每个按钮都有一个onClick方法,该方法会导致if/else链以确定要加载哪个片段。我应该提到的一个额外细节是,每个片段都是全屏的,并且它替换了容器Activity中的容器FrameLayout。 - D Ta
如果每个片段都有一个按钮,您就可以避免if/else链,而且片段本来就不是全屏的(有人说它们占用的内存要少得多)。但是,您无法避免必须说“当X按钮被点击时,转到屏幕Y...”。 注:这是程序开发相关内容的英译中。 - Nanoc
1
你决定如何解决你的问题了吗? - PsiX
2个回答

0
你不应该检查哪个按钮被选中,而是使用按钮的onClickListener来选择正确的片段。
buttonForFragment1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
             // select fragment 1 here
    }
});

关于这个问题,这不是设计模式的层面,而是实现细节(惯用语),你正确地认识到了你的代码存在问题,我认为上面的代码是一个可能的解决方案,但并不符合模式的要求。

0
在您的布局中,您可以为每个按钮分配一个活动中的方法:
<Button 
    ...
    android:onClick="startFragmentOne" />

然后实现那些方法:

public void startFragmentOne(View view) {
    //TODO
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接