Android: long click on a button -> perform actions


Question

I want to use the same button to perform 2 different methods. One method when user single clicks it and a second method (different) when the user LONG clicks it.

I use this for the single short click (which works great):

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

        });

I've tried to add a longClickListener but it didn't work.

Appreciate any ideas on how to solve this.

Thanks!

1
55
12/9/2010 8:20:34 PM

Accepted Answer

I've done it before, I just used:

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

Per documentation:

public void setOnLongClickListener (View.OnLongClickListener l)

Since: API Level 1 Register a callback to be invoked when this view is clicked and held. If this view is not long clickable, it becomes long clickable.

Notice that it requires to return a boolean, this should work.

109
12/9/2010 8:43:47 PM

To get both functions working for a clickable image that will respond to both short and long clicks, I tried the following that seems to work perfectly:

    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;
    }
});

//Then the functions that are called:

 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();

}

It seems that the easy way of declaring the item in XML as clickable and then defining a function to call on the click only applies to short clicks - you must have a listener to differentiate between short and long clicks.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon