Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 16/09/15, 12:04:33
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Toolbar, DrawerLayout, Menú vacío y onBackPressed

Es la primera vez que creo un post en esta sección, normalmente lo que hago es responderlos

Voy a explicar un problema que me ha pasado esta mañana, y que no se si es cosa de mi móvil o pasará con todos

Aunque no lo indique, todo lo que explico a continuación es usando AppCompat, aunque el móvil es Lollipop.

Normalmente nunca uso Toolbar, suelo poner el botón de menú a la izquierda, un menú en el centro y un SearchView a la derecha, todo a mano. Pero estoy haciendo una aplicación nueva para una empresa que quieren cosas muy visuales, así que me he puesto con el Toolbar para poder añadir el ActionBarDrawerToggle (el botón de menú que se convierte en una flecla y viceversa según el % que esté abierto el DrawerLayout).

Pues bien, hago mi Toolbar, le quito el Title, le pongo un logo, le añado el DrawerLayout y su configuración, le añado el SearchView mediante un menú de la siguiente manera:

[PHP]
<item
android:id="@+id/search"
android:title="@string/buscar"
android:icon="@android:drawable/ic_menu_search"
myapp:showAsAction="always"
myapp:actionViewClass="android.support.v7.widget.S earchView"/>
[/PHP]

Añado mi código para que funcione de esta otra:

[PHP]
getMenuInflater().inflate(R.menu.menu_principal, menu);
return true;
[/PHP]

Y todo funciona perfecto, pero en estas que pulso el botón de menú del móvil (tengo un S5, el botón de menú en una pulsación larga en el botón que muestra las apps abiertas) y al pulsar atrás el método onBackPressed() no se ejecuta. Le pongo puntos de interrupción y nada. Si no pulso menú todo funciona perfecto, pero si lo pulso bloqueada, no puedes salir. Si abro el DrawerLayout y pulso atrás se cierra, pero el onBackPressed no se ejecuta.

En estás que cambio el "always" del SearchView a "never", la lupa no sale, pero al pulsar menú aparece el texto "Buscar" (que no hace nada) pero el onBackPressed si funciona.

Así que vuelvo a ponerlo a "always" y añado otra opción de menú más, quedando así:

[PHP]
<item
android:id="@+id/search"
android:title="@string/buscar"
android:icon="@android:drawable/ic_menu_search"
myapp:showAsAction="always"
myapp:actionViewClass="android.support.v7.widget.S earchView"/>

<item
android:id="@+id/acercade"
android:title="@string/acercade"
myapp:showAsAction="never" />
[/PHP]

Ahora además de la lupa me aperecen los 3 puntos verticales. Si los pulso aparece la opción "Acerca de" arriba, si pulso el botón de menú aparece "Acerca de" abajo. Y el OnBackPressed() funciona perfectamente.

Y después de todo este rollazo que dejo aquí por si alguien se encuentra el mismo problema es.

¿A alguien más le ha pasado esto y ha encontrado una forma menos chapuza de solucionarlo?

Un saludo.
Responder Con Cita
Gracias de parte de:


  #2  
Viejo 16/09/15, 12:33:39
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

A ver si se pasa kriogeN por aquí y te lo soluciona en un momento. Oh, espera... O_O tiene que haber un fallo en matrix.

Supongo que cualquier cosa que pueda decirte ya la habrás visto. Hay un hilo en stackoverflow interesante donde discuten que el DrawerLayout se queda los onBackPressed para él y cómo evitarlo. No es lo mismo, pero quizá haya un problema de focos cuando hay menú vacío y sea cuestión de dar el foco al elemento que corresponda.

Por si te inspira algo nada más...

http://stackoverflow.com/questions/1...on-drawer-open
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 16/09/15, 12:40:35
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
A ver si se pasa kriogeN por aquí y te lo soluciona en un momento. Oh, espera... O_O tiene que haber un fallo en matrix.

Supongo que cualquier cosa que pueda decirte ya la habrás visto. Hay un hilo en stackoverflow interesante donde discuten que el DrawerLayout se queda los onBackPressed para él y cómo evitarlo. No es lo mismo, pero quizá haya un problema de focos cuando hay menú vacío y sea cuestión de dar el foco al elemento que corresponda.

Por si te inspira algo nada más...

http://stackoverflow.com/questions/1...on-drawer-open
Eso ya lo hice para evitar que si pulso otra acción con el DrawerLayout abierto luego al pulsar Back no se cerraba, ahora se me ejecute mi onBackPressed siempre donde compruebo si el DrawerLayout está abierto o no. Pero si hago lo del menú sin la opción de Acerca de el onBackPressed sigue sin ejecutarse.

(Lo del DrawerLayout es un espectáculo, estas cosas no me pasaban cuando las hacía sin el Toolbar, o no se si será por la librería de soporte 23, la última que usaba era la 19. Pero ya he migrado POR FIN a Android Studio y uso todo nuevo)

Parece que el que se queda el foco es el Toolbar, voy a ponerlo eso mismo al Toolbar a ver si así se soluciona. Ya diré algo.

EDIT: Pues no, no es el Toolbar. Si tampoco es importante, al final la opción de "Acerca de" la usaré, pero es simplemente porque me joden estas cosas que no tienen sentido

Última edición por kriogeN Día 16/09/15 a las 12:44:04.
Responder Con Cita
  #4  
Viejo 16/09/15, 23:07:23
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
Me tocó hacer una aplicación con SearchView y Toolbar y tambien me dio problemas al abrir el SearchView, pero de tema que no cuadraba bien con los otros iconos del menu (tenia que tener searchview y otro icono). Se solapaba con el otro icono, y el otro aparecia como encima del SearchView.
Al final lo solucione a lo chapuza, con referencias a los MenuItem (y una guarrada con Handler.postDelayed para las rotaciones que mejor no cuento, porque aun me siento sucio)

Te recomiendo que pongas un issue en el tracker, a ver si hay suerte.


 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Pero si hago lo del menú sin la opción de Acerca de el onBackPressed sigue sin ejecutarse.
Sera tonto de preguntar, pero si usas el Drawer usaras fragments... no estaras haciendo override en algun fragment y no llamando a super.onBackPressed..?
Yo que se, por intentar buscarle alguna logica


 Cita: Originalmente Escrito por kriogeN Ver Mensaje
ya he migrado POR FIN a Android Studio y uso todo nuevo
Bienvenido hombre, ya tocaba!

Última edición por Dexafree Día 16/09/15 a las 23:10:13.
Responder Con Cita
  #5  
Viejo 16/09/15, 23:30:34
Array

[xs_avatar]
oxot oxot no está en línea
Usuario muy activo
 
Fecha de registro: may 2010
Localización: Santiago
Mensajes: 741
Modelo de smartphone: Xiaomi RedRice
Tu operador: Pepephone
 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Sera tonto de preguntar, pero si usas el Drawer usaras fragments... no estaras haciendo override en algun fragment y no llamando a super.onBackPressed..?
Yo que se, por intentar buscarle alguna logica
Yo he tenido ese problema tonto pero realmente en el Fragment no hay ningún método onBackPressed. Este método lo implemento en la clase Activity y compruebo qué fragment está visible para saber lo que quiero hacer cuando el usuario ha pulsado el botón atrás.

Estooo, si el onBackPressed no se llama es como si la actividad que contiene los fragments hubiera perdido el foco. Si pones un punto de ruptura cuando salta el Search, en el debugger que Actividad ves como la que manda?? Por curiosidad más que nada, no sé si te ayudará.
Quizá este es tu mismo problema:
http://stackoverflow.com/questions/1...w-is-activated
Responder Con Cita
  #6  
Viejo 16/09/15, 23:39:04
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Me tocó hacer una aplicación con SearchView y Toolbar y tambien me dio problemas al abrir el SearchView, pero de tema que no cuadraba bien con los otros iconos del menu (tenia que tener searchview y otro icono). Se solapaba con el otro icono, y el otro aparecia como encima del SearchView.
Al final lo solucione a lo chapuza, con referencias a los MenuItem (y una guarrada con Handler.postDelayed para las rotaciones que mejor no cuento, porque aun me siento sucio)

Te recomiendo que pongas un issue en el tracker, a ver si hay suerte.




Sera tonto de preguntar, pero si usas el Drawer usaras fragments... no estaras haciendo override en algun fragment y no llamando a super.onBackPressed..?
Yo que se, por intentar buscarle alguna logica




Bienvenido hombre, ya tocaba!
Si, uso Fragments, pero en el momento del problema aún no tenía ningún Fragment cargado. Estaba construyendo la Toolbar y el Drawer y de pronto he dejado puesto el dedo en el botón izquierdo del S5 (Menú) y me he dado cuenta que al pulsar atrás no salía de la app. Y ahí ha empezado todo.

No se cual es el problema, pero si pulsas el botón de Menú teniendo como único elemento un SearchView con la opción de que esté siempre en la Toolbar el onBackPressed deja de funcionar, por lo menos en el S5.
Responder Con Cita
  #7  
Viejo 17/09/15, 16:15:15
Array

[xs_avatar]
oxot oxot no está en línea
Usuario muy activo
 
Fecha de registro: may 2010
Localización: Santiago
Mensajes: 741
Modelo de smartphone: Xiaomi RedRice
Tu operador: Pepephone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Si, uso Fragments, pero en el momento del problema aún no tenía ningún Fragment cargado. Estaba construyendo la Toolbar y el Drawer y de pronto he dejado puesto el dedo en el botón izquierdo del S5 (Menú) y me he dado cuenta que al pulsar atrás no salía de la app. Y ahí ha empezado todo.

No se cual es el problema, pero si pulsas el botón de Menú teniendo como único elemento un SearchView con la opción de que esté siempre en la Toolbar el onBackPressed deja de funcionar, por lo menos en el S5.
Y por curiosidad si pones ifRoom, porque supongo que siempre entrará en el huevo y será visible y por saber cómo reacciona el botón...
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android

Herramientas


Hora actual: 00:27:13 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /