Подтвердить что ты не робот

OnFinishInflate() никогда не вызывается

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

4b9b3361

Ответ 1

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.