Попытка вызвать виртуальный метод addView для нулевого ссылочного объекта, даже если на объект есть ссылка

В своем классе я создал переменную ...

private ImageView imgLayoutImgEditPet;

В методе onCreate я ссылаюсь на переменную ...

imgLayoutImgEditPet = new ImageView(this);

Затем я добавляю этот ImageView в макет ...

layoutImgEditPet.addView(imgLayoutImgEditPet);

Это должно работать, но я получаю эту ошибку ...

java.lang.NullPointerException: попытка вызвать виртуальный метод void android.widget.LinearLayout.addView (android.view.View) для ссылки на нулевой объект

Как я могу создать новый ImageView в моем макете?

Это не ImageView. Это layoutImgEditPet, это ноль.

Mike M. 18.12.2018 08:03

layoutImgEditPet все еще упоминается, но он находится в теге <include>. Как мне сослаться на макет, если он во включаемых тегах?

Garren Fitzenreiter 18.12.2018 08:05

Вы бы выбрали его findViewById(), как любой другой View. Однако, если это корневой View во включенном макете, и вы установили android:id в теге <include>, имейте в виду, что идентификатор <include> имеет приоритет над идентификатором корневого View. То есть корневой View получит идентификатор, который находится на <include>.

Mike M. 18.12.2018 08:08

Аааааааааааааааааааааааааааааааааааааааааааааааааааала важность мне нужно будет сослаться на включенный макет и найти его внутренний макет с помощью includelayout.innerlayout.findViewById ()

Garren Fitzenreiter 18.12.2018 08:13

Нет, я не это говорю. Я просто указываю на то, что ID корневого View может не соответствовать вашим ожиданиям. После того, как он присоединен к иерархии Activity, вы можете просто использовать findViewById() напрямую, как и любой другой View, независимо от того, насколько он вложен, но вы должны использовать правильный идентификатор.

Mike M. 18.12.2018 08:14

Ооооооо. Я думаю, мне придется вложить линейный макет включенного макета в другой макет, потому что линейный макет, на который я пытался ссылаться, на самом деле является корневым представлением

Garren Fitzenreiter 18.12.2018 08:47

Это нормально. Вам не нужно его вкладывать. Просто используйте правильный идентификатор, чтобы найти его. Если у вас есть android:id на теге <include>, то это идентификатор, который в конечном итоге получит LinearLayout, независимо от того, какой идентификатор вы установили в теге <LinearLayout>.

Mike M. 18.12.2018 08:50

Ах. Понятно! Теперь работает. Спасибо!

Garren Fitzenreiter 18.12.2018 08:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
254
0

Другие вопросы по теме