I have read the Android UI trick 2 on Android developers, which tells people how to include a layout in another layout file multiple times, and give these included layouts different id. However, the sample here is overwriting the layout id, not the id of the views IN this layout. For example, if the workspace_screen.xml looks like this:
<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"/>
And I include it three times in another layout file. Do I end up with three TextViews with id firstText, and another three with secondText? Isn't there an id collision? And how do I find the secondText TextView in the third included layout with findViewById? What should I input in the findViewById method?
To efficiently re-use complete layouts, you can use the <include/> and <merge/> tags to embed another layout inside the current layout. Reusing layouts is particularly powerful as it allows you to create reusable complex layouts.
You can use as many layouts as possible for a single activity but obviously not simultaneously. You can use something like: if (Case_A) setContentView(R. layout.
android.view.ViewStub. A ViewStub is an invisible, zero-sized View that can be used to lazily inflate layout resources at runtime. When a ViewStub is made visible, or when inflate() is invoked, the layout resource is inflated. The ViewStub then replaces itself in its parent with the inflated View or Views.
Say you want to include this:
<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>
so in your code you insert it like this:
<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>
now you want to access the text views within the included layouts to set the text dynamically. In your code you simply type:
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");
notice that you use the individual LinearLayouts' findViewById methods to narrow the search to only their children.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With