Я создал специальный AlertDialog для отображения Spinner и некоторых элементов EditText. Когда я выбираю пункт меню, запускается этот пользовательский AlertDialog. Все работает нормально, пока я на самом деле не выбрал счетчик, чтобы попытаться выбрать элемент, и в этот момент я получаю исключение BadTokenException. Я читал другие посты StackOverflow, в которых говорилось, что подобные исключения были результатом попытки отобразить диалог, используя getApplicationContext (), а не передавая Activity.this. Я не передаю явно getApplicationContext () ни на что, связанное с этим AlertDialog.
Чтобы настроить этот пользовательский журнал AlertDiaglog, я создал файл макета, содержащий элементы Spinner и EditText, а затем заставил AlertDialog использовать этот макет:
LayoutInflater inflater = (LayoutInflater)getApplication().getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout, (ViewGroup)findViewById(R.id.custom_layout_root));
spinner = (Spinner)layout.findViewById(R.id.custom_layout_spinner);
ArrayAdapter adap = ArrayAdapter.createFromResource(Activity.this, R.array.data, android.R.layout.simple_spinner_item);
adap.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adap);
spinner.setOnItemSelectedListener(new SpinnerItemListener());
AlertDialog.Builder dialog = new AlertDialog.Builder(Activity.this);
dialog.setTitle("Title");
dialog.setPositiveButton("Ok", new Dialog.OnClickListener() ...
...
dialog.show();
Этот код отлично работает для отображения AlertDialog. Однако, когда я фактически касаюсь Spinner, я получаю следующую проблему:
Thread [<3> main] (Suspended (exception WindowManager$BadTokenException))
ViewRoot.handleMessage(Message) line: 1704
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4203
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 791
ZygoteInit.main(String[]) line: 549
NativeStart.main(String[]) line: not available [native method]
Кто-нибудь имеет представление о том, что происходит? Сообщение об исключении говорит:
Unable to add window -- token null is not for an application
Я полагаю, что это сообщение, которое другие видели для этого типа проблемы, поэтому я предполагаю, что ApplicationContext находится где-то в миксе, но я не уверен, где. Мой манифест настроен с minSdk 1.5 с Target SDK 1.6.