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

Какой конструктор нужно вызвать для просмотра?

У меня есть пользовательский вид, расширенный от View. Существует 3 конструктора представлений:

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

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

4b9b3361

Ответ 1

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

public View (Context context)

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

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

public View (Context context, AttributeSet attrs)

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

Метод 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) для первых двух, соответственно.