2016-11-22 2 views
0

Я работаю над своим первым Android-приложением, и я пытаюсь добавить spinner к моему представлению. Изучив руководство для разработчиков Android, я понял, как добавить его в свое представление и как фактически добавлять элементы в счетчик.NullPointerException по инициализированному объекту

За исключением, когда я на самом деле пытаюсь добавлять элементы и следующие хлопки до:

Java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter)' on a null object reference

Как вы можете видеть, что я пытаюсь запустить .setAdapter() на объекте вращателя. Обычно произойдет эта ошибка, если я хотел бы попробовать это без инициализации объекта вращателя, но я сделал:

Spinner spinner = (Spinner) findViewById(R.id.where_spinner); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.where_array, android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

Код выше всего вызывается после я называю setContentView(), так что это не проблема.

Как может быть, что что-то простое, как прядильщик, вызывает у меня столько неприятностей?

Спасибо.

EDIT

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

+1

'findViewById' может возвращать' null' –

+1

'spinner' is null. У макета, установленного с помощью 'setContentView()' действительно, есть 'where_spinner', или это, например, макет фрагмента? – laalto

+0

@laalto Это делает, и это не так. Я забыл упомянуть, что 'where_spinner' находится в файле макета, используемом для диалога, но поскольку я могу сделать это с другими элементами в том же макете, я думал, что это не имеет большого значения. –

ответ

3

spinner является null. Activity#findViewById() возвращает nulls, если представление не найдено в иерархии представлений активности, которую вы установили с setContentView(), или setContentView() не был вызван вообще.

Основываясь на комментариях, ваш where_spinner фактически находится в иерархической структуре диалога. Вызовите findViewById() по иерархии диалога, а не по активности, чтобы найти его.

Смежные вопросы