Cedric
Cedric

Reputation:

inflate vs findViewById

Suppose I have a simple layout xml like the following:

button.xml:

<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Are there any differences in the following calls? and which one should i use?

button = (Button) getLayoutInflater().inflate(R.layout.button, null);

and

View v = getLayoutInflater().inflate(R.layout.button, null);
button = (Button) v.findViewById(R.id.button01);

Upvotes: 17

Views: 10850

Answers (2)

Robin
Robin

Reputation: 1240

This one creates a new view with the given layout where 'R.layout.button' is generated by the name of the xml file 'button.xml'. Each time you call .inflate(...) you will get a new instance.

View v = getLayoutInflater().inflate(R.layout.button, null);

--

While that one finds an existing view within a layout where R.id.button01 is generated by the id name 'android:id="@+id/button01"'. Every time you call .findViewById(R.id.button01) you will get the same instance since the view 'v' will be the same.

button = (Button) v.findViewById(R.id.button01);

Upvotes: 16

Roman Nurik
Roman Nurik

Reputation: 29745

The first option is cleaner and slightly more efficient.

Your layout inflater will return a Button. With the first option, you gain access to the Button directly. With the second option, you cast the button down to a View and then look for the view with a given ID, which is an extra useless comparison, since the view with the ID you're looking for in the hierarchy happens to be the button itself. So in the second option, v == button.

Upvotes: 0

Related Questions