Строка, которая вызывает ошибку: bookSpinnerPosition = bookAdapt.getPosition (bookValue);
Это означает, что bookAdapt
равно null
. Вы инициализируете его с помощью bookAdapt = (ArrayAdapter) bookListSpinner.getAdapter();
, поэтому, скорее всего, вы неправильно установили адаптер на bookListSpinner
.
Код, который вы вставили сюда, не показывает, где вы объявляете и инициализируете bookListSpinner
, а также где вы создаетеадаптер для установки на него. Однако в вашем обработчике onDataChange()
есть:
Spinner bookSpinner = (Spinner) findViewById(R.id.bookListSpinner);
ArrayAdapter<String> booksAdapter = new ArrayAdapter<String>(EditBookActivity.this, android.R.layout.simple_spinner_item, books);
. Он получает виджет счетчика из макета и создает для него новый адаптер каждый раз, когда запускается событие onDataChange()
. ,Установка адаптера для этой локально объявленной ссылки счетчика не влияет на любые другие ссылки, которые вы объявили в другом месте.
Кроме того, создание нового адаптера для каждого события может привести к проблемам с производительностью, поскольку он перестраивает все представления. для прядильщика каждый раз. Вместо этого вы должны создать адаптер один раз в onCreate()
для действия (или onCreateView()
, если у вас есть фрагмент). Затем вы обновляете только данные для адаптера, а не каждый раз создаете совершенно новый адаптер.
Использование этого метода также гарантирует, что у вас есть правильный объект счетчика, доступный с правильным адаптером. На самом деле, вы можете просто сохранить ссылку на адаптер, чтобы вам вообще не нужно было звонить getAdapter()
.