日々精進

新しく学んだことを書き留めていきます

一つのlayout xmlを複数includeした時にViewへの参照を取得する方法

parent.xmlにchild.xmlを複数回includeした場合、同じidのViewが複数できるがそれらへの参照をどうやって取得するか。例は以下。

parent.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <include
            android:id="@+id/child1_id"
            layout="@layout/child"/>

        <include
            android:id="@+id/child2_id"
            layout="@layout/child"/>
    </LinearLayout>
</ScrollView>

child.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">

    <TextView
        android:id="@+id/left_text_view"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_gravity="center|right"
        android:gravity="right"/>

    <TextView
        android:id="@+id/right_text_view"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:layout_gravity="center|right"
        android:gravity="left"/>
</LinearLayout>

以下のようにfindViewByIdを二回呼べばいい。

View view1 = findViewById(R.id.child1_id).findViewById(R.id.left_text_view);
View view2 = findViewById(R.id.child2_id).findViewById(R.id.left_text_view);

参考: