Intereting Posts

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

У меня есть пользовательский вид, расширенный из 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) . На мой взгляд, второй конструктор вызван. Почему второй? Как заранее знать, какой из них будет называться и почему?

Solutions Collecting From Web of "Какой конструктор нужно вызвать для просмотра?"

С сайта разработчика 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) для первых двух, соответственно.