Reputation:
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
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
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