В приложении Honeycomb я в нескольких местах использую собственный подкласс PopupWindow для отображения различных представлений. Все это прекрасно работает, пока одно из этих представлений не попытается отобразить другое PopupWindow.
Например, Spinner и AutoCompleteTextView оба используют PopupWindow для отображения связанных списков вариантов. Если вы поместите один из них в представление PopupWindow и нажмете, чтобы активировать виджет, WindowManager предупредит вас через LogCat:
WARN/WindowManager(111): Attempted to add window with token that is a sub-window: android.os.BinderProxy@40ea6880. Aborting.
И затем он выдаст WindowManager$BadTokenException
, когда попытается показать это всплывающее окно.
Представление для пользовательского PopupWindow раздувается с использованием LayoutInflater, полученного из контекста привязанного представления. Я видел другие вопросы, предполагающие, что BadTokenExceptions могут возникать при использовании неподходящего контекста для получения LayoutInflater, но не похоже, что в этом случае есть другая опция.
Предупреждение журнала от WindowManager указывает на то, что это неподдерживаемый случай. Кто-нибудь может подтвердить это или предоставить палку, чтобы толкнуть меня в правильном направлении?
Вот ссылка на код (в любом случае его версия), из которого происходит ошибка: WindowManagerService.java