我正在开发的Android应用程序有一个主要的活动已经增长相当大。 这主要是因为它包含一个带3个选项卡的TabWidget 。 每个选项卡都有相当多的组件。 活动必须一次控制所有这些组件。 所以我想你可以想象这个Activity有20个字段(几乎每个组件都有一个字段)。 它还包含了很多逻辑(点击监听器,逻辑来填充列表等)。 我通常在基于组件的框架中做的是将所有东西都分解成自定义组件。 每个自定义组件都将有明确的责任。 它将包含它自己的一套组件以及与该组件相关的所有其他逻辑。 我试图找出如何做到这一点,我在Android文档中发现了一些他们喜欢称之为“复合控制”的东西。 (请参阅http://developer.android.com/guide/topics/ui/custom-components.html#compound并滚动到“复合控件”部分)我想创build一个基于XML文件的这样的组件定义视图结构。 在文档中说: 请注意,就像使用Activity一样,您可以使用基于声明(基于XML)的方法来创build包含的组件,也可以通过代码将它们嵌套在程序中。 那好,这是个好消息! 基于XML的方法正是我想要的! 但它并没有说如何去做,除了它是“像一个活动”…但是我在一个活动中做的是调用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实例?
最近,我开始在Facelets中使用JSF 2.0,并对新的复合组件感到困惑,这些组件知道现有的<ui:include>和Facelets 1.x提供的其他模板技术。 这些方法有什么区别? 在function上他们似乎提供了相同的: <ui:param> vs <cc:attribute> , <ui:insert> + <ui:define> vs标记文件,重复使用现有的模板。 在复合组件的情况下,除了语法和界面清晰之外,还有什么? 性能可能不同吗?