Intereting Posts
Как программно запускать разрешение на запуск приложения MIUI Security? Как бороться с устаревшими классами в Android для обеспечения совместимости Установленное приложение Cocos2d-x не может быть запущено на Android Как определить, когда телефон отвечает или отклонен Передача намерения дополнительно к радиовещательному приемнику android Имена хостов для Android браузера не разрешаются, если имя домена не добавлено Android AsyncTask vs Thread + Handler vs rxjava Android OpenCV Drawing Hough Lines Могу ли я сделать телефонный звонок из HTML на Android? Идеи источника QualcommCameraHardware native_get_picture: MSM_CAM_IOCTL_GET_PICTURE Ошибка времени ожидания подключения? Включить заднюю камеру с помощью HTML5 Ошибка: (19, 0) Метод Gradle DSL не найден: 'android ()' MediaCodec с поверхностным входом: запись в фоновом режиме Kapt не разрешает генерируемые протобуфом классы Каким будет URL-адрес моих приложений в Google Play, когда я его опубликую?

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

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