У меня есть окно автозаполнения, которое я пытаюсь реализовать во всплывающем окне в моем приложении для Android. Помещение этого всплывающего окна в макет моей основной деятельности работает нормально. Когда я переместил его в свой всплывающий макет, он будет успешно отображаться на экране. Однако, когда я набираю за порогом автозаполнения и обнаруживается совпадение (таким образом, запускается выпадающий список элементов, которые соответствуют моему частичному тексту), приложение вылетает со следующей ошибкой:
08-08 11:12:53.803 E/AndroidRuntime(22221): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@4057f5c0 is not valid; is your activity running?
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.view.ViewRoot.setView(ViewRoot.java:544)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.view.Window$LocalWindowManager.addView(Window.java:430)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.widget.PopupWindow.invokePopup(PopupWindow.java:916)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:828)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1277)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:1081)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:1064)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.os.Handler.dispatchMessage(Handler.java:99)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.os.Looper.loop(Looper.java:143)
08-08 11:12:53.803 E/AndroidRuntime(22221): at android.app.ActivityThread.main(ActivityThread.java:4196)
08-08 11:12:53.803 E/AndroidRuntime(22221): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 11:12:53.803 E/AndroidRuntime(22221): at java.lang.reflect.Method.invoke(Method.java:507)
08-08 11:12:53.803 E/AndroidRuntime(22221): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-08 11:12:53.803 E/AndroidRuntime(22221): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-08 11:12:53.803 E/AndroidRuntime(22221): at dalvik.system.NativeStart.main(Native Method)
А вот код, который я использую (всплывающее окно запускается при нажатии кнопки, где кнопка находится в основном макете упражнения):
public void onClick(View v) {
LayoutInflater inflater =
(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PopupWindow pw = new PopupWindow(
inflater.inflate(R.layout.auto_complete_location, null, false),
400, 600, true);
AutoCompleteTextView autoCompleteLocationsView =(AutoCompleteTextView)
pw.getContentView().findViewById(R.id.autoCompleteLocations);
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(autoCompleteLocationsView.getContext(),
android.R.layout.simple_dropdown_item_1line, locationNames);
autoCompleteLocationsView.setAdapter(adapter);
pw.showAtLocation(findViewById(R.id.mainActivityContainer), Gravity.CENTER, 0, 0);
}
Заранее спасибо за любую помощь.