レイアウトを複数回再利用する場合、レイアウト内のビューにアクセスするにはどうすればいいですか? 質問する

レイアウトを複数回再利用する場合、レイアウト内のビューにアクセスするにはどうすればいいですか? 質問する

Android 開発者向けの Android UI トリック 2 を読みました。このトリックでは、レイアウトを別のレイアウト ファイルに複数回含める方法と、含めたレイアウトに異なる ID を付与する方法が説明されています。ただし、ここでのサンプルでは、​​レイアウト ID を上書きしており、このレイアウト内のビューの ID は上書きしていません。たとえば、workspace_screen.xml が次のようになっているとします。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/firstText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="first"/>
<TextView android:id="@+id/secondText"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="second"/>

そして、別のレイアウト ファイルに 3 回インクルードします。id が firstText の TextView が 3 つ、secondText の TextView が 3 つ作成されることになりますか? ID の衝突はありませんか? また、findViewById を使用して 3 番目にインクルードされたレイアウトで secondText TextView を見つけるにはどうすればよいでしょうか? findViewById メソッドには何を入力すればよいでしょうか?

ベストアンサー1

たとえば、次の内容を含めたいとします。

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal"
>
    <ImageView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/some_image"
    />
    <TextView
        android:id="@+id/included_text_view"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
    />
</LinearLayout>

コードでは次のように挿入します:

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="vertical"
>
    <include android:id="@+id/header_1" layout="@layout/name_of_layout_xml" />
    <include android:id="@+id/header_2" layout="@layout/name_of_layout_xml" />
</LinearLayout>

ここで、テキストを動的に設定するために、含まれているレイアウト内のテキスト ビューにアクセスします。コードでは、次のように入力します。

LinearLayout ll = (LinearLayout)findViewById(R.id.header_1);
TextView tv = (TextView)ll.findViewById(R.id.included_text_view);
tv.setText("Header Text 1");

ll = (LinearLayout)findViewById(R.id.header_2);
tv = (TextView)ll.findViewById(R.id.included_text_view);
tv.setText("Header Text 2");

個々の LinearLayouts の findViewById メソッドを使用して、検索をその子だけに絞り込むことに注意してください。

おすすめ記事