2011-06-10 14 views
5

Me encuentro con el findViewById() que devuelve el problema NULL que muchos de ellos parecen encontrar. Entiendo que findViewById() solo debe invocarse después de que la vista se haya inflado en onFinishInflate(). Mi pregunta es: ¿qué es ver la inflación?LayoutInflater y onFinishInflate()

En la actividad llamo al setContentView(R.layout.testview) que debe llamar al constructor Ver y también llama al onDraw(). Entonces eso infla la vista, ¿no es así? Si es así, ¿por qué hay un LayoutInflater y una función para realmente inflar la vista? De hecho, en mi código onInflateView() nunca se llama a pesar de que se procesa toda la vista y pude interactuar con el programa. Eso me dice que Ver inflación es de alguna manera diferente de llamar al constructor de View y a las funciones onDraw(). ¿Alguien puede explicar por favor?

EDITAR: También tengo una vista personalizada que dibujo utilizando la función onDraw(). De alguna manera, la función onFinishInflate() nunca se llama para mí. ¿Cuál puede ser el motivo de esto?

-P

Respuesta

6

Mi pregunta es - ¿cuál es la vista de la inflación?

Ver inflación es el acto de convertir un archivo XML de diseño en el árbol correspondiente de objetos View. Que realiza manualmente usando este LayoutInflater, o Android lo hace por usted de setContentView(), una función de Adapter clases, etc.

En la actividad que llamo setContentView (R.layout.testview) que debe llamar al constructor y Ver también llama a onDraw(). Entonces eso infla la vista, ¿no es así?

setContentView() infla el archivo de disposición suministrado.

Si es así, ¿por qué hay un LayoutInflater y una función para realmente inflar la vista?

Debido a que a veces hay que hacerlo a mano, como por ejemplo en un complejo ListView con diferentes tipos de filas (por ejemplo.,. Encabezado y detalle).

+0

Gracias! ¿Hay un ejemplo como ese en Google ApiDemos? Además, ¿cuándo se llama a onFinishInflate() con setContentView()? En mi caso no se llama en absoluto. – user220201

+0

@ user220201: "¿Hay un ejemplo como ese en Google ApiDemos?" - ejemplo de qué? "Además, ¿cuándo se llama a onFinishInflate() con setContentView()? En mi caso, no se llama". - He usado 'onFinishInflate()' antes y ha funcionado bien, aunque no tengo ninguna muestra actual de él. Asegúrese de tener la anotación '@ Override', en caso de que haya cometido un error en la firma del método. – CommonsWare

+1

Estaba preguntando sobre un ejemplo donde necesita llamarse LayoutInflater. – user220201

Cuestiones relacionadas