2009-04-12 22 views
14

Uso onLongClick y onClick eventos de un botón para obtener entradas del usuario. Cuando; el usuario hace clic largo y activa el evento OnLongClick, el evento onClick también se desencadena. No pude encontrar mi problema El código de dos métodos se muestra a continuación:El evento LongClick también desencadena el evento Click

@Override 
    public void onClick(View v) { 
     switch(((Button) v).getId()) 
     { 
     case R.id.enter: 
      EntertheNumber(); 
      break; 
     case R.id.clear: 
      CleartheNumber(); 
      break; 
     case R.id.number_zero: 
     case R.id.number_one: 
     case R.id.number_two: 
     case R.id.number_three: 
     case R.id.number_four: 
     case R.id.number_five: 
     case R.id.number_six: 
     case R.id.number_seven: 
     case R.id.number_eight: 
     case R.id.number_nine: 
      AddtotheNumber(mEditor, (Button) v); 
      break; 
     } 
@Override 
    public boolean onLongClick(View view) { 
     if(SMBGuesstheNumber.bDisplayFlagList) 
     { 
      theActiveButton = (Button) view; 
      showDialog(R.id.display_flaglist); 
     } 
     return false; 
    } 

En realidad, mi proyecto es de código abierto. Por lo tanto, puede encontrar todo el código en http://code.google.com/p/guessthenumber/

Gracias.

Respuesta

32

No estoy seguro de qué orden ocurren estos eventos, pero el controlador onLongClick devuelve un bool para indicar si se manejó el evento. Debería devolver verdadero si lo manejó para que no se invoquen otros eventos de clic. No sé si esto evitará que evite que onClick() se active.

También se pueden dirigir estos eventos de vez en cuando usando setClickable (booleano) y setLongClickable (booleano)

Usted puede encontrar esta información y más acerca de los eventos de interfaz de usuario here.

+2

¿Cómo es que me perdí el booleano. Definitivamente tienes razón. devolver verdadero debe evitar onClick. Gracias. –

Cuestiones relacionadas