我目前正在开发的Android应用程序有一个主活动,它已经变得非常庞大。这主要是因为它包含了一个带有3个选项卡的
在组件化框架中,我通常会将所有内容拆分成自定义组件。每个自定义组件都有明确的责任。它将包含其自己的一组组件和所有其他与该组件相关的逻辑。
我试图找出如何实现这一点,我在Android文档中找到了他们所谓的“复合控件”(Compound Control)。 (请参见http://developer.android.com/guide/topics/ui/custom-components.html#compound并滚动到“复合控件”部分)我想创建一个基于XML文件定义视图结构的这样的组件。
文档中说:
请注意,就像使用Activity一样,您可以使用声明性(基于XML的)方法来创建包含的组件,也可以从代码中以编程方式嵌套它们。
好消息是,基于XML的方法正是我想要的!但是它没有说明如何做,除了它“像在Activity中一样”……但我在Activity中所做的就是调用
因此,我尝试手动膨胀XML,就像这样:
请问有没有更好的方法来避免实例化多余的
TabWidget
。每个选项卡都有相当多的组件。该活动必须同时控制所有这些组件。因此,你可以想象一下,这个Activity有大约20个字段(几乎每个组件都有一个字段)。此外,它包含了大量的逻辑(点击监听器、填充列表等)。在组件化框架中,我通常会将所有内容拆分成自定义组件。每个自定义组件都有明确的责任。它将包含其自己的一组组件和所有其他与该组件相关的逻辑。
我试图找出如何实现这一点,我在Android文档中找到了他们所谓的“复合控件”(Compound Control)。 (请参见http://developer.android.com/guide/topics/ui/custom-components.html#compound并滚动到“复合控件”部分)我想创建一个基于XML文件定义视图结构的这样的组件。
文档中说:
请注意,就像使用Activity一样,您可以使用声明性(基于XML的)方法来创建包含的组件,也可以从代码中以编程方式嵌套它们。
好消息是,基于XML的方法正是我想要的!但是它没有说明如何做,除了它“像在Activity中一样”……但我在Activity中所做的就是调用
setContentView(...)
来从XML填充视图。如果你以LinearLayout
为例创建子类,该方法将不可用。因此,我尝试手动膨胀XML,就像这样:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
这个方案有效,但我加载的 XML 有 LinearLayout
声明为根元素。这导致充气的 LinearLayout
是 MyCompoundComponent
的子级,而后者本身已经是一个 LinearLayout
!因此,现在在 MyCompoundComponent
和它实际需要的视图之间多了一个冗余的 LinearLayout。请问有没有更好的方法来避免实例化多余的
LinearLayout
?