Я разрабатываю окно PopUp для Android, и он работает, я добавил EditText и кнопку на том, что при работе в ADV эта работа работает правильно, во время работы на устройстве, когда я фокусируюсь на EditText, это бросает странный Исключение.
android.view.WindowManager$BadTokenException: Unable to add window - - token android.view.ViewRoot&48163b18 is not valid; is your active running?
Я не знаю, имеет ли это значение, но я запускаю Galaxy Tab со входом Swype.
Теперь я прочитал спецификации Window.showAtLocation
public void showAtLocation (View parent, int gravity, int x, int y)
Display the content view in a popup window at the specified location. If the popup window cannot fit on screen, it will be clipped. [...]
Parameters
parent a parent view to get the getWindowToken() token from
[...]
Проблема только в этом токене, но как я могу передать токен Activity?
Я также написал небольшой код для воспроизведения ошибки.
PopupWindow window = new PopupWindow(activity);
window.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
window.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
window.setTouchable(true);
window.setFocusable(true);
EditText text = new EditText(activity);
text.setText("Dont touch, this crash!");
window.setContentView(text);
window.showAtLocation(arg0, Gravity.NO_GRAVITY, 10,10);
Запуск на AVD все работает нормально, а на устройстве этот сбой и выбросить ошибку, о которой я упоминал.
Я обнаруживаю что-то новое, когда я в ландшафтном режиме, таких ошибок не возникает.