2010-12-09 13 views
42

Quiero usar el mismo botón para realizar 2 métodos diferentes. Un método cuando el usuario hace clic en él y un segundo método (diferente) cuando el usuario LONG hace clic en él.Android: haga clic en un botón de largo -> realice acciones

lo uso para el solo clic corta (que funciona muy bien):

Button downSelected = (Button) findViewById(R.id.downSelected); 
     downSelected.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       method(); 
       } 
      } 

     }); 

He intentado añadir un longClickListener pero no funcionó.

Apreciar cualquier idea sobre cómo solucionar esto.

Gracias!

+1

debe publicar su código completo, ¿qué ha intentado con el OnLongClickListener – schwiz

Respuesta

85

lo he hecho antes, acabo de utilizar:

down.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      return true; 
     } 
    }); 

por documentación:

pública setOnLongClickListener vacío (View.OnLongClickListener l)

Desde: Nivel de API 1 Registrar una devolución de llamada que se invocará cuando se haga clic y mantenga esta vista en . Si esta vista no es larga hace clic, se hace larga haciendo clic.

Observe que se requiere devolver un valor booleano, esto debería funcionar.

+0

¡Gracias! Debí haberlo implantado mal cuando lo probé. el clic largo funciona, pero todavía realiza el método de clic corto, ¿alguna idea? –

+0

¿Quiere decir que hace las dos o simplemente llama al método corto? ¿En qué versión de Android está esto? – blindstuff

+0

Hace ambas cosas: \ en Android 2.2 –

-2

Intente utilizar un oyente ontouch en lugar de un oyente de clics.

http://developer.android.com/reference/android/view/View.OnTouchListener.html

+1

para el clic largo o para ambos? –

+0

Esta respuesta no es lo suficientemente descriptiva como para ser útil. ¿Cómo sugeriría el onTouchListener para ser utilizado para detectar clics largos? –

+0

Estoy de acuerdo con Simon, sin embargo; podría calcular el tiempo entre MotionEvent.DOWN y MotionEvent.UP – else

10

Inicialmente cuando implementé un longClick y un clic para realizar dos eventos por separado, el problema al que me enfrenté fue que cuando tenía un longclick, la aplicación también realizaba la acción que se realiza con un simple clic. La solución que me di cuenta fue cambiar el tipo de retorno de longClick a verdadero, que normalmente es falso de manera predeterminada. Cámbialo y funciona perfectamente.

+1

Muchas gracias. Esto hizo el truco. – user427969

13

Para conseguir ambas funciones de trabajo se puede hacer clic para una imagen que responda a las dos clics cortos y largos, He intentado lo siguiente que parece funcionar perfectamente:

image = (ImageView) findViewById(R.id.imageViewCompass); 
    image.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      shortclick(); 
     } 
    }); 

    image.setOnLongClickListener(new View.OnLongClickListener() { 
    public boolean onLongClick(View v) { 
     longclick(); 
     return true; 
    } 
}); 

// entonces las funciones que se llama:

public void shortclick() 
{ 
Toast.makeText(this, "Why did you do that? That hurts!!!", Toast.LENGTH_LONG).show(); 

} 

public void longclick() 
{ 
Toast.makeText(this, "Why did you do that? That REALLY hurts!!!", Toast.LENGTH_LONG).show(); 

} 

parece que el camino más fácil de declarar el elemento en XML como se puede hacer clic y luego definir una función a invocar el clic sólo se aplica a los clics cortos - debe tener un oyente para diferenciar entre clics cortos y largos.

Cuestiones relacionadas