2012-03-10 20 views
17

Who/What invoca a FininInflate()? No importa cómo infle mis archivos de diseño (en código) este método nunca parece activarse. ¿Alguien puede darme un ejemplo o decirme cuándo se llama realmente a FininInflate()?onFinishInflate() nunca se llama

Respuesta

30

View.onFinishInflate() se llama después de que una vista (y sus elementos secundarios) se inflan desde XML. Específicamente, es durante una llamada al LayoutInflater.inflate(...) que se llamará onFinishInflate(). La inflación se realiza recursivamente, comenzando desde la raíz. Una vista que contiene niños puede necesitar saber cuándo sus hijos han terminado de inflarse. Uno de los principales usos de esta devolución de llamada es ViewGroups para realizar acciones especiales una vez que sus hijos estén listos.

Supongamos que tiene una subclase de View llamada CustomView, y que no infle internamente ningún diseño. Si usted tuvo un CustomView alguna parte en su diseño, es decir:

... 
<com.company.CustomView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
... 

Debería ver una devolución de llamada a onFinishInflate() una vez que ha sido inflado. Si esto está en su diseño principal de su actividad, entonces puede considerar esto después de llamar al Activity.setContentView(int). Internamente, esto llamará al LayoutInflater.inflate(...).

Como alternativa, si ha creado una instancia de CustomView con:

... 
new CustomView(context); 
... 

... no obtendrá una llamada a onFinishInflate(). Hacer una instancia de esta manera significará naturalmente que no tiene hijos y, por lo tanto, no tiene que esperar a que se los instancia de forma recursiva, como en la inflación XML.

+6

Así que los documentos están equivocados. Si infla manualmente un diseño, no se llamará a la devolución de llamada. Pero aún puede invocarlo manualmente para que sea homogéneo. – Snicolas

+0

No puede llamar al método usted mismo. Es un método protegido ... necesitarás una clase protegida. Noté que tenerlo en el paquete 'android.view' no funciona. –

+2

Eso no es cierto, puede llamar 'super.onFinishInflate' o su reemplazado' onFinishInflate' en el constructor. – GLee

Cuestiones relacionadas