安卓:长按按钮 -> 执行操作

69

我想使用同一个按钮执行两种不同的方法。当用户单击它时,执行一种方法,而当用户长时间点击它时,执行另一种(不同的)方法。

我已经使用这段代码来处理短时间单击(非常有效):

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

        });

我尝试添加了一个长按监听器,但它没有起作用。

感激任何解决此问题的想法。

谢谢!


1
你应该发布完整的代码,以及你尝试使用OnLongClickListener的内容。 - Nathan Schwermann
7个回答

144

我以前做过,我只是使用了:

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

根据文档:

public void setOnLongClickListener (View.OnLongClickListener l)

自API Level 1以来,注册一个回调函数, 当单击并长按此视图时调用。如果此视图不可长按,则变为可长按。

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


1
谢谢!我可能在尝试时没有正确地实现它。长按可以工作,但它仍然执行短按方法,有什么想法吗? - Lior Iluz
它是同时执行两个方法还是只调用了短方法?这是在哪个版本的安卓系统上? - blindstuff
它在Android 2.2上都能完成:\ - Lior Iluz
8
哦,没事了,我只需要把“return false”改成“return true” :) - Lior Iluz
仅在长按时使用“return false” - mremremre1

20

为了让一个可点击的图片能够同时响应短按和长按,我尝试了下面的方法,它似乎完美地实现了这一点:

    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中将项目声明为可点击,然后定义一个仅在点击时调用的函数的简便方法只适用于短按 - 你必须有一个监听器来区分短按和长按。


17

最初,当我实现长按和单击以执行两个不同事件时,我面临的问题是,当我长按时,应用程序还会执行简单单击要执行的操作。我意识到的解决方案是将longClick的返回类型更改为true,这通常默认为false。更改它后,它可以完美地工作。


1

将长按监听器中的return false;改为return true;

当您长按按钮时,如果它返回true,则执行工作。如果它返回false,则会执行它的工作并调用短按和onClick也会起作用。


0

谢谢!在KOTLIN中的工作方式如下:

binding.someView.setOnClickListener {
        Toast.makeText(this, "Simple click!!!", Toast.LENGTH_LONG).show()
        }

binding.someView.setOnLongClickListener {
    Toast.makeText(this, "Looong click!!!", Toast.LENGTH_LONG).show()
    true
    }

-3

最简单和最新的方法是使用长按监听器,例如:

someView.setOnLongClickListener {
        //do your work 
        true
    }

-3

1
长按还是两者都支持? - Lior Iluz
2
这个答案不够详细,无法提供有用的帮助。您如何建议使用onTouchListener来检测长按? - Simon Forsberg
1
我同意Simon的观点 - 不过,你可以计算MotionEvent.DOWN和MotionEvent.UP之间的时间。 - else

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接