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