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