2010-12-11 18 views
61

Tengo una vista de texto en un diseño cuyo fondo es un Selector. Y el texto de TextView está configurado como Transmitido desde HTML. Luego configuro TextView con LinkMovementMethod.¿Cómo pasar el evento onClick de una vista a su principal en Android?

Ahora cuando toco en TextView, el evento click no se envía a su diseño principal para activar el selector.

¿Cómo se debe resolver esto?

Respuesta

32

creo que es necesario utilizar uno de estos métodos con el fin de ser capaz de interceptar el evento antes de que sea enviado a los componentes adecuados:

Activity.dispatchTouchEvent(MotionEvent) - Esto permite a su actividad para interceptar todos los eventos de toque antes de que sean enviado a la ventana.

ViewGroup.onInterceptTouchEvent(MotionEvent) - Esto permite que un grupo de visualización vea eventos a medida que se envían a Vistas secundarias.

ViewParent.requestDisallowInterceptTouchEvent(boolean) - Llámalo en una vista principal para indicar que no debe interceptar eventos táctiles con onInterceptTouchEvent (MotionEvent).

Más información here.

Espero que ayude.

+1

¿Hay una manera más fácil de pasar los eventos para activar onClick y onLongClick en la vista principal, o tengo que implementarlos yo mismo? – shiami

+0

Mira esto: http://stackoverflow.com/questions/2136696/pass-event-to-parent-view Posiblemente quieras pasar el mismo oyente de clic a las otras instancias como se sugiere, aunque no lo haga Sé si funcionará, pero podría valer la pena intentarlo. –

+0

La respuesta a continuación es mucho más clara – JPM

157

Declare su TextView no se puede hacer clic/enfocable mediante el uso de android:clickable="false" y android:focusable="false" o v.setClickable(false) y v.setFocusable(false). Los eventos de clic deben enviarse al padre de TextView ahora.

Nota:

Con el fin de lograr este, hay que añadir clic a su directa parent. o establecer android:clickable="false" y android:focusable="false" en su matriz directa para pasar el oyente a otro padre.

+1

Oh hombre si pudiera dar este +100 lo haría. ¡He estado intentando descubrir cómo hacer que un clic solo funcione en ViewPager y no en el diseño de adaptadores con TouchImageView implementando onTouch! Esta solución funcionó como un encanto. – JPM

+0

Funciona a la perfección. Mucho mejor que la respuesta exceptuada. – Rooster242

+0

, pero ¿y si quiero manejar el evento de cambio de foco de EditText? –

9

En algún momento sólo esto ayuda:

View child = parent.findViewById(R.id.btnMoreText); 
    child.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      View parent = (View) v.getParent(); 
      parent.performClick(); 
     } 
    }); 

Otra variante, las obras no siempre:

child.setOnClickListener(null); 
4

Deja

android:duplicateParentState="true" 

de niño, entonces los puntos de vista consiguen su estado estirable (centrado, presionado, etc.) de su padre directo y no de sí mismo. puede establecer onclick para el elemento primario y lo llama en el elemento secundario al que hizo clic

3

Si su TextView crea problemas de clic, entonces elimine android:inputType="" del archivo xml.

+0

No sé por qué, pero esto funcionó para mí. ¡Gracias! –

Cuestiones relacionadas