какой конструктор будет вызван для просмотра? - PullRequest
20 голосов
/ 13 ноября 2011

Мой пользовательский вид расширен с View.Есть 3 вида конструкторов:

  1. View(Context context, AttributeSet attrs, int defStyle)
  2. View(Context context, AttributeSet attrs)
  3. View(Context context)

Из моей деятельности я звонюstd.setContentView(R.layout.main).Второй конструктор вызывается, на мой взгляд.Почему второй?Как заранее узнать, какой из них будет называться и почему?

1 Ответ

43 голосов
/ 13 ноября 2011

С сайта разработчика Android в документации для View:

public View (Context context)

Простой конструктор, используемый при создании представления из кода.

Итак, этот конструктор - то, что вы можете использовать для создания представления в Java.Он не будет вызываться при раздувании из XML.

public View (Context context, AttributeSet attrs)

Конструктор, который вызывается при раздувании представления из XML.Это вызывается, когда представление строится из файла XML, предоставляя атрибуты, которые были указаны в файле XML.В этой версии используется стиль по умолчанию, равный 0, поэтому применяются только те значения атрибутов, которые указаны в теме контекста и указанном атрибуте AttributeSet.

Метод onFinishInflate () будет вызываться после добавления всех дочерних элементов.

Таким образом, этот конструктор будет вызываться, когда вы раздуваете представление из XML, когда не указываете стиль.

public View (Context context, AttributeSet attrs, int defStyle)

Выполнение инфляции из XML и применение базового стиля для конкретного класса.Этот конструктор View позволяет подклассам использовать их собственный базовый стиль, когда они надуваются.Например, конструктор класса Button вызовет эту версию конструктора суперкласса и предоставит R.attr.buttonStyle для defStyle;это позволяет стилю кнопки темы изменять все атрибуты базового представления (в частности, его фон), а также атрибуты класса Button.

Вы должны реализовать все эти конструкторы, но вы можете поместить всеработы в третьем, вызвав this(context, null) и this(context, attrs, 0) для первых двух, соответственно.

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