2012-03-10 6 views
17

Кто/Что вызывает onFinishInflate()? Независимо от того, как я раздуваю файлы макета (в коде), этот метод никогда не запускается. Может ли кто-нибудь дать мне пример или сказать мне, когда onFinishInflate() действительно вызван?onFinishInflate() никогда не называется

ответ

30

View.onFinishInflate() вызывается после того, как представление (и его дети) завышено от XML. В частности, при вызове LayoutInflater.inflate(...) будет вызываться onFinishInflate(). Инфляция выполняется рекурсивно, начиная с корня. Взгляд, содержащий детей, возможно, должен знать, когда его дети закончили быть раздутыми. Одно из основных применений этого обратного вызова - для ViewGroups для выполнения специальных действий, когда его дети готовы.

Предположим, что у вас был подкласс View, называемый CustomView, и что он сам не раздувает сами макеты. Если у вас CustomView где-то в макете, то есть:

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

Вы должны увидеть обратный вызов onFinishInflate() после его надувают. Если это в вашем основном расположении вашей деятельности, вы можете рассмотреть это, после того, как вызывается Activity.setContentView(int). Внутри это вызовет LayoutInflater.inflate(...).

В качестве альтернативы, если вы создали экземпляр CustomView с:

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

... вы не получите вызов onFinishInflate(). Игнорирование его таким образом, естественно, означает, что у него нет детей, и, следовательно, ему не нужно ждать, пока они будут воспроизведены рекурсивно, как в XML-инфляции.

+6

Итак, документы ошибочны. Если вы вручную раздуваете макет, обратный вызов не вызывается. Но вы все равно можете вызвать его вручную, чтобы быть однородным. – Snicolas

+0

Вы не можете вызвать метод самостоятельно. Это защищенный метод ... вам понадобится защищенный класс. Заметил, что наличие в пакете 'android.view' не работает. –

+2

Это неправда, вы можете вызвать 'super.onFinishInflate' или ваш переопределенный' onFinishInflate' в конструкторе. – GLee