Кто/Что вызывает 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.