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>

このアプローチを選択したのは、設計目標の 1 つがレイアウト全体を xml で定義することだったからです。

基本的に私の質問は、このようなビュー id の配列を使用することはアンチパターンですか、そうでなければ危険ですか?

4

1 に答える 1

1

私が気に入らない主な点は、2 つの場所 (id 配列と子ビュー自体) に同じデータがあることです。問題を回避するには、2 つのバージョンの同期を維持する必要があります。2 つのデータ セットが異なるファイルにあると、問題が悪化します。

あなたが何をしているのかをもっと知らなければ、別のアプローチを提案するのは難しいですが、私はそれを見つけることをお勧めします. カスタム レイアウトを拡張して ID を収集した後、子を反復処理できませんでしたか? (これはonFinishInflateで行うので、子も膨張します。)

于 2013-08-21T01:55:05.280 に答える