0

我创建了一个包含任意子视图的自定义 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>

数组.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 数组是反模式还是危险的?

4

1 回答 1

1

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

在不了解您正在做什么的情况下,很难提出另一种方法,但我建议您找到一种。在您扩充自定义布局并收集 ID 之后,您不能只遍历子项吗?(您会在 中执行此操作onFinishInflate,因此孩子也会被充气。)

于 2013-08-21T01:55:05.280 回答