在arrays.xml中定义一个id数组?

时间:2013-08-21 01:46:01

标签: android

我创建了一个包含任意子视图的自定义ViewGroup,并且应该填充它们。它需要知道它的子节点的id,所以我在arrays.xml中定义了一个id数组,我将该数组作为属性传递给我的自定义组,如下所示:

my_layout.xml:

    <com.example.MyLayout
            ...
            custom:children="@array/four_children">

            <TextView ...
                    android:id="@+id.child1" />

            <TextView ...
                    android:id="@+id.child2" />

            <TextView ...
                    android:id="@+id.child3" />

            <TextView ...
                    android:id="@+id.child4" />

    </com.example.MyLayout>

arrays.xml:

<array name="four_children">
    <item>@id/child1</item>
    <item>@id/child2</item>
    <item>@id/child3</item>
    <item>@id/child4</item>
</array>

我选择了这种方法,因为其中一个设计目标是完全用xml定义布局。

基本上我的问题是,使用一组View ID这样的反模式还是危险的?

1 个答案:

答案 0 :(得分:1)

我不喜欢的主要是你在两个地方(在id数组和子视图中)拥有相同的数据。您需要保持两个版本同步以避免出现问题。将两个数据集放在不同的文件中会加剧这个问题。

如果不了解您正在做的事情,很难提出替代方法,但我建议您找一个。在扩充自定义布局并收集ID后,难道不能遍历子节点吗? (你会在onFinishInflate中这样做,所以孩子们也会被夸大。)