Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I access the views inside the layout when I reuse it multiple times?

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?

like image 592
user412759 Avatar asked Aug 06 '10 07:08

user412759


People also ask

What tag should you use to add a reusable view component to a layout file?

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.

How can use multiple layouts in one activity in Android?

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.

What is view stub?

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.


1 Answers

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.

like image 120
d370urn3ur Avatar answered Sep 21 '22 16:09

d370urn3ur