2012-10-03 24 views
6

Tengo varios widgets en una vista, cada uno necesita su propio modo de acción. Veo que ActionMode no se cierra automáticamente cuando el usuario toca fuera de la barra de acciones. Por lo tanto, es muy posible que el usuario inicie un Modo de Acción para un control, luego toque (clic largo en mi caso) otro control y apile una segunda Barra de Acción encima de la primera. Esto causa estragos en la programación lógica.cómo detectar si el modo de acción ya está presente

Puedo hacer un seguimiento del modo de acción actual con una variable de miembro de nivel de actividad y descartar el actual si se necesita uno nuevo. Sin embargo, esto está haciendo que mi código sea complicado de leer y mantener. Y, además, preferiría descartarlo inmediatamente cuando el usuario toque algo fuera de la barra de acciones.

¿Alguna sugerencia sobre una buena manera de manejar esto?

Respuesta

6

Estaba buscando una solución a este problema hace algún tiempo y, como sé, no podría seguirlo sin guardar el estado actual del modo de acción en una variable global. Sin embargo, no creo que una variable con nombre propio haga que el código sea complicado.

+0

Bien, pero a un lado el desorden, digamos que el usuario hace clic en un EditText que no ha subclasificado. ¿Cómo descartas la barra de acción ahora inapropiada? –

+0

Bien, si te entendí bien ... Lo hice así: implementé la variable global 'ActionMode mMode;', lo llené con el modo de acción actual en un método 'onCreateActionMode (...)', y luego solo llamé a 'mMode .finish() 'cuando necesito salir del modo de acción actual – user1049280

+0

Correcto, lo entiendo. Pero, ¿cómo sabes cuándo llamar a finish()? Es decir, hay muchos lugares en los que un usuario puede hacer clic; ¿subclasifica cada objeto y busca MotionEvent.ACTION_DOWN y luego llama a finish()? Eso sería altamente propenso a errores, estos pedacitos de código estarían salpicados por todos lados. –

Cuestiones relacionadas