2010-03-30 22 views
14

Supongamos que tengo un simple diseño XML como el siguiente:inflar vs findViewById

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" /> 

¿Hay diferencias en las siguientes llamadas? y ¿cuál debo usar?

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

y

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

Oops, filtra mi código. aquí: Botón \t xmlns: android = "http://schemas.android.com/apk/res/android" \t android: id = "@ +/Identificación del button01" \t androide: layout_width = "wrap_content" \t android: layout_height = "wrap_content" –

Respuesta

1

La primera opción es más limpio y ligeramente más eficiente.

Su diseño inflador devolverá un Button. Con la primera opción, obtiene acceso directamente al Button. Con la segunda opción, presiona el botón a View y luego busca la vista con una identificación dada, que es una comparación más inútil, ya que la vista con la ID que está buscando en la jerarquía es el botón sí mismo. Entonces, en la segunda opción, v == button.

13

Éste crea una nueva vista con el diseño dado donde 'R.layout.button' se genera con el nombre del archivo xml 'button.xml'. Cada vez que llamas a .inflate (...) obtendrás una nueva instancia.

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

-

Mientras que uno encuentra una vista existente dentro de una presentación en la que R.id.button01 se genera con el nombre id 'android: id = "@ +/Identificación del button01"'. Cada vez que llame a .findViewById (R.id.button01) obtendrá la misma instancia ya que la vista 'v' será la misma.

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