La causa:
que encontrar la causa del error hasta el comportamiento de auto-corrección ortográfica en algunos teléfonos (Moto Droid Razr y pocos otros Moto Phones) y algunos Rom de Android (como algunos ROM ROM CM7 y CM7.1). Si el texto contiene una palabra que tiene un hechizo incorrecto, y el cursor del texto está sobre o cerca del texto, el sistema operativo Android intentará abrir automáticamente el teclado e intentar proporcionar sugerencias sobre la ortografía correcta.
En la mayoría de los dispositivos, el cuadro de sugerencia de corrección automática solo aparece como un segmento de línea sobre el teclado. Sin embargo, en algunas ROM personalizadas (CM7 es una de las que parece que me pasa) y algunos dispositivos (Droid Razr), hay un cuadro de selección desplegable adicional que aparece:
Vea esto image de lo que parece la ventana emergente de autocorrección como (lo siento no suficiente representante para insertar la imagen)
Sospecho que la lista desplegable de autocorrección también se implementa como una ventana emergente, y está tratando de usar la ventana emergente actual (la que contiene EditText con el mis-spell word) como la vista raíz e intentando obtener el windowToken desde la vista raíz.
Dado que la ventana emergente en sí no es una vista tradicional, supongo que no puede dar la ventana WindowToken correcta a las otras vistas que las piden, lo que da lugar al error.
Las Soluciones:
1) La forma más sencilla que sido capaz de solucionar este problema es mediante el uso de diálogo en lugar de ventanas emergentes. Su API es muy similar y en mi caso es bastante fácil reemplazar PopupWindow usando Dialog.
Por ejemplo:
Código antiguo:
LayoutInflater inflater = (LayoutInflater) parentActivity.getLayoutInflater();
View mainView = parentActivity.findViewById(R.id.main_calendar_fragment);
updateEventPopupWindow = new PopupWindow(inflater.inflate(
R.layout.add_event_fragment, null, false), metrics.widthPixels, metrics.heightPixels, true);
updateEventPopupWindow.setBackgroundDrawable(new BitmapDrawable());
updateEventPopupWindow.showAtLocation(mainView, Gravity.CENTER, 0, 0);
Nuevo código:
LayoutInflater inflater = (LayoutInflater) parentActivity.getLayoutInflater();
View mainView = parentActivity.findViewById(R.id.main_calendar_fragment);
updateEventDialog = new Dialog(parentActivity, android.R.style.Theme_NoTitleBar);
updateEventDialog.setContentView(inflater.inflate(R.layout.add_event_fragment, (ViewGroup) mainView, false));
updateEventDialog.show();
2) El segundo enfoque es más difícil, pero podría ser un adecuado si PopupWindow a la sustitución de diálogo se no factible, es para usar Fragmentos en lugar de PopupWindows. Hay muchos buenos fragmentos tutorials por ahí, así que no me molestaré en repasar cómo hacer esto en esta publicación.
3) Como último recurso, como múltiples carteles mencionados anteriormente, puede desactivar el texto autocorregido en los campos EditText dentro de PopupWindwow para dar un paso al costado este problema. Sin embargo, esto lleva a experiencias de usuario horribles, ya que muchos usuarios (y teclados como swype) dependen de la corrección automática, ya que esto alejará al usuario de su aplicación.
Espero que esto ayude a otros que enfrentan este problema. Golpeé mi cabeza contra el teclado por más de un día y finalmente decidí probar el enfoque Dialog, lo que para mi sorpresa fue bastante fácil de cambiar. Buena suerte para usted
Esto puede ser un tiro total en la oscuridad, pero después de investigar esto un poco, parece que este problema podría estar causado por el uso de Activity.getApplicationContext como el contexto. Este hilo te da una solución, si este es realmente tu problema. http://groups.google.com/group/android-developers/browse_thread/thread/7a648edddccf6f7d?pli=1 –
Intenté incluso con muchos contextos (desde el botón, desde la actividad, la aplicación) el mismo error en todos. –
@Marcos Vasconcelos, tengo el mismo problema contigo, y parece que no es el código, pero el dispositivo causa el bloqueo. y he probado algunas pestañas android de Android samsumg, la mayoría de ellas se bloqueará. Quiero saber si ha resuelto este problema. o qué deberíamos hacer – DiveInto