如何使用具有自己的布局和行为的部件构建布局

时间:2014-08-14 14:31:11

标签: android

我正在编写一个以这种方式创建了2个标签的应用:

ActionBar.Tab tab1, tab2;
Fragment fragmentTab1 = new VesselFragment();
Fragment fragmentTab2 = new CrucibleFragment();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowTitleEnabled(false);

    tab1 = actionBar.newTab().setText(R.string.vessel);
    tab2 = actionBar.newTab().setText(R.string.crucible);

    tab1.setTabListener(new MyTabListener(fragmentTab1));
    tab2.setTabListener(new MyTabListener(fragmentTab2));

    actionBar.addTab(tab1);
    actionBar.addTab(tab2);
}

据我所知,每个标签都是片段。但我的问题是两个标签都非常相似(不过我必须有两个单独的标签)。它们都有EditText,Spinner和TableLayout。但CrucibleFragment还有一个额外的TableLayout和一些其他附加视图。另一方面,VesselFragment还有其他一些在CrucibleFragment中不存在的View。当然,两个片段中的部件表现完全相同。

我现在的方式是2个独立的片段,每个片段都有自己的布局和自己的代码来处理视图行为。问题在于,正如我所说,片段在许多地方非常相似,而CrucibleFragment和VesselFragment中的代码几乎是彼此的副本,它们的布局也是如此。当我尝试添加一些适用于两个选项卡的UI功能时,我希望只在代码中的一个位置和XML中的一个位置执行,而不是两个代码和2XML。

我知道如何解决这个问题 - 创建一些类型的部件,每个部件都有一个简单的布局和简单的代码来处理它们。因此,两个选项卡共享的TableLayout,Spinner和EditText的一部分以及仅存在于某些特定选项卡中的其他部分。

我可以创建一个超类并让片段扩展该类,但我仍然需要有布局的副本。我认为这可以通过使用片段来完成,但是关于如何在互联网上实现我想要的信息却很少。

这样做的好方法是什么?

1 个答案:

答案 0 :(得分:0)

您应该查看[使用<include/>] 1重新使用布局。您可以将要重复使用的元素放在将包含在CrucibleFragment和VesselFragment布局中的布局中。在片段的布局中,您可以添加其他元素。在您将创建的超类中,您可以尝试访问包含布局中的元素(在CrucibleFragment和VesselFragment中充气之后)。