vista de Android con Vista.IDO todavía recibe onTouch y onClick


Esto me confunde:

Por lo que he leído, una vista con setVisibility(View.GONE); no debe recibir más eventos táctiles o de clic. Mi diseño tiene dos partes, que serán visibles o desaparecerán para que solo una de ellas sea visible y utilizable a la vez pero Vista.IRSE no sirve. No puedo ver la vista GONE, como era de esperar, pero todavía reacciona a onClick (y consume el evento que la otra vista debería obtener).

¿Puedes ayudarme?

tal vez de interés: Cuando yo iniciar mi proyecto una vista se ha IDO, la otra visible. Esta vez funcionará como se esperaba (la vista DESAPARECIDA es básicamente ignorada), pero después de configurar la vista.Si revisamos el código, dejará de funcionar.

Author: Mateus Gondim, 2011-01-18

9 answers

¿Puede usar 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 esperaba...

 102
Author: edovino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-27 12:40:55

Si establece 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ó.

 93
Author: Pavel Alexeev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 19:13:30

Intente establecer la propiedad clickable en false usando setClickable(false) después de setVisibility(View.GONE)

 7
Author: Anil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-03 13:35:58

mview.clearAnimation() tienen algunos issuses pero amination.setFillAfter(false);y mview.setClickable(false); FUNCIONA perfecto .

 3
Author: Hemant Shori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-04 06:55:50

Lo que espero que esté sucediendo es que haga que una vista sea invisible, pero que las vistas hijos aún respondan a los clics (es decir, su vista es un ViewGroup). Usted podría hacer algo en las líneas de:

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 me ha funcionado en el pasado. Actualmente no conozco una mejor manera de hacer esto.

 2
Author: Siebe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-21 09:46:13

Habría publicado esto como un comentario, pero desafortunadamente no pude publicar un comentario. Como podría ser una posible solución para usted, lo posteo de esa manera:

Mientras escribes "onClick" asumo que estás usando el atributo onClick en tu diseño XML. Intente establecer un OnClickListener con setOnClickListener en lugar del atributo onClick. Tal vez esto ayude...

 1
Author: M.E.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-21 16:16:23

Para aquellos que hicieron las respuestas anteriores y aún no resolvieron sus problemas, recomiendo eliminar la vista de la vista padre. Si necesita volver a mostrar la vista, simplemente haga una copia y agréguela a la vista principal.

Esto puede parecer exagerado, pero estaba ocultando / mostrando grupos de vista completos en su caso podría ser un botón, textview o imagen, esta solución seguirá funcionando.

 1
Author: Kim Montano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-01 08:34:50

Intenta agregar.clearAnimation () en onAnimationEnd override.

 0
Author: doodlleus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-18 16:37:21

Si tiene una animación en la vista, debe llamar a la vista.clearAnimation.

 0
Author: LingYFH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-25 10:36:51