2010-12-09 30 views
42

我想使用相同的按钮来执行2种不同的方法。 用户单击它时的一种方法,以及当用户点击它时的另一种方法(不同)。Android:长按一下按钮 - >执行动作

我用这个单一的短按一下(这伟大工程):

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

     }); 

我试图添加longClickListener,但没有奏效。

欣赏关于如何解决此问题的任何想法。

谢谢!

+1

你应该发布你的完整代码,你用OnLongClickListener – schwiz 2010-12-09 20:26:55

回答

85

我以前做过,我只是用:

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

每文档:

公共无效setOnLongClickListener (View.OnLongClickListener L)

从以下版本开始:API级别1注册回调当这个视图是 被点击并保持时,被调用。如果此视图不是可长期点击的 ,则会变为长可点击的 。

请注意,它需要返回一个布尔值,这应该工作。

-2

尝试使用ontouch监听器而不是clicklistener。

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

+1

进行长时间点击还是两者都尝试过? – 2010-12-09 20:31:14

+0

这个答案描述不够有用。你会如何建议onTouchListener用于检测长时间点击? – 2012-10-04 14:39:50

+0

我同意西蒙 - 然而;你可以计算MotionEvent.DOWN和MotionEvent.UP之间的时间 – else 2017-07-31 15:18:24

10

最初当我实现了一个longClick和一个点击来执行两个单独的事件时,我面对的问题是当我有一个longclick时,应用程序还执行了一个简单的点击操作。我意识到的解决方案是将longClick的返回类型更改为true,默认情况下通常为false。改变它,它完美的作品。

13

要获得将要短期和长期响应点击一个可点击的图像加工两个功能,我试过,似乎完美地工作如下:

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

//那么函数调用:

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

} 

看来,宣布在XML的项目为可点击,然后定义一个函数,在点击调用简单的方法只适用于短点击 - 你必须有一个听众短期和长期点击之间进行区分。