我目前正在开发的 Android 应用程序的主要活动已经变得非常大。这主要是因为它包含一个TabWidget
带有 3 个选项卡的选项卡。每个选项卡都有很多组件。该活动必须同时控制所有这些组件。所以我想你可以想象这个 Activity 有 20 个字段(几乎每个组件都有一个字段)。它还包含很多逻辑(单击侦听器、填充列表的逻辑等)。
我通常在基于组件的框架中所做的是将所有内容拆分为自定义组件。然后,每个自定义组件都有明确的责任。它将包含它自己的一组组件以及与该组件相关的所有其他逻辑。
我试图弄清楚如何做到这一点,并且我在 Android 文档中找到了他们喜欢称之为“复合控件”的东西。(请参阅http://developer.android.com/guide/topics/ui/custom-components.html#compound并滚动到“复合控件”部分)我想基于定义视图结构。
在文档中它说:
请注意,就像使用 Activity 一样,您可以使用声明性(基于 XML)的方法来创建包含的组件,也可以在代码中以编程方式嵌套它们。
嗯,这是个好消息!基于 XML 的方法正是我想要的!但它没有说明如何做,只是它“就像一个活动”......但我在一个活动中所做的是调用setContentView(...)
从 XML 中膨胀视图。如果您例如 subclass ,则该方法不可用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);
}
}
LinearLayout
这有效,除了我正在加载的 XML 已声明为根元素这一事实。这导致膨胀LinearLayout
的成为一个孩子,MyCompoundComponent
它本身已经是一个LinearLayout
!! 所以现在我们在它们之间有一个冗余的 LinearLayoutMyCompoundComponent
和它实际需要的视图。
有人可以为我提供一种更好的方法来解决这个问题,避免冗余LinearLayout
实例化吗?