onFinishInflate () никогда не вызывается - PullRequest
22 голосов
/ 11 марта 2012

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

1 Ответ

37 голосов
/ 11 марта 2012

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-инфляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...