Vista de Android con View.GONE todavía recibe onTouch y onClick
visibility (9)
Esto me confunde:
Por lo que he leído, una vista con setVisibility (View.GONE); no debería recibir más eventos de toque o clic. Mi diseño tiene dos partes, que serán visibles o no, de modo que solo una de ellas sea visible y utilizable a la vez, pero View.GONE no funciona. No puedo ver la vista GONE, como se esperaba, pero todavía reacciona a onClick (y consume el evento que debería tener la otra vista).
¿Me puedes ayudar?
Quizás de interés: cuando comienzo mi proyecto, una vista se HA IDO, la otra visible. Esta vez funcionará como se espera (la vista GONE se ignora básicamente), pero después de configurar View.GONE a través del código, dejará de funcionar.
¿Quizás uses animaciones para mostrar / ocultar las vistas? Obtengo este comportamiento cuando uso animaciones que tienen android: fillEnabled = "true" android: fillAfter = "true" No lo entiendo, y parece un error - si uso animaciones sin fillEnabled / fillAfter, todo funciona como se espera. ..
Intente configurar la propiedad clicable en falso usando setClickable (falso) después de setVisibility (View.GONE)
Lo habría publicado como comentario, pero desafortunadamente no pude publicar un comentario. Como podría ser una solución posible para ti, la publico de esa manera:
Al escribir "onClick", supongo que está utilizando el atributo onClick
en su diseño XML. Intente establecer un OnClickListener
con setOnClickListener
lugar del atributo onClick
. Tal vez esto ayude ...
Lo que espero que esté sucediendo es que haga que una vista sea invisible, pero que los puntos de vista aún responden a los clics (es decir, su vista es un grupo de visualización). Podrías hacer algo como:
private void hideTheChildren(View v){
if(v instanceof ViewGroup) {
int count = ((ViewGroup)v).getChildCount();
for(int k = 0 ; k < count ; k++) {
hideTheChildren(((ViewGroup)v).getChildAt(k));
}
v.setVisibility(View.GONE);
}
else {
v.setClickable(false);
v.setVisibility(View.GONE);
}
}
por supuesto, entonces también tienes que hacer lo contrario
private void showTheChildren(View v){
if(v instanceof ViewGroup) {
int count = ((ViewGroup)v).getChildCount();
for(int k = 0 ; k < count ; k++) {
showTheChildren(((ViewGroup)v).getChildAt(k));
}
v.setVisibility(View.VISIBLE);
}
else {
v.setClickable(true);
v.setVisibility(View.VISIBLE);
}
}
Esto funcionó para mí en el pasado. Actualmente no sé de una mejor manera de hacer esto.
Para aquellos que respondieron las preguntas anteriores y aún no resolvieron sus problemas, les recomiendo que eliminen la vista de la vista principal. Si necesita mostrar la vista nuevamente, solo haga una copia y agréguela a la vista principal.
Esto podría parecer excesivo, pero estaba ocultando / mostrando grupos de vista completa en su caso, podría ser un botón, vista de texto o imagen, esta solución seguirá funcionando.
Sí, mview.clearAnimation()
tiene algunos issuses pero amination.setFillAfter amination.setFillAfter(false);
y mview.setClickable(false);
OBRAS perfecto.
Si configura setVisibility(View.GONE)
después de alguna animación (fade out, por ejemplo), intente borrar la animación con clearAnimation()
. Esto es lo que me ayudó.
intente agregar .clearAnimation () en la anulación OnAnimationEnd.
si tiene una animación en la vista, debe llamar a view.clearAnimation.