【问题标题】:Android: long click on a button -> perform actionsAndroid:长按一个按钮 -> 执行操作
【发布时间】:2010-12-09 20:20:34
【问题描述】:

我想使用同一个按钮来执行 2 种不同的方法。 当用户单击它时的一种方法和当用户长按它时的第二种方法(不同)。

我将它用于单次短按(效果很好):

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

        });

我尝试添加 longClickListener,但没有成功。

感谢有关如何解决此问题的任何想法。

谢谢!

【问题讨论】:

  • 你应该发布你的完整代码,你用 OnLongClickListener 尝试了什么

标签: android


【解决方案1】:

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

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

根据文档:

public void setOnLongClickListener (View.OnLongClickListener l)

自:API 级别 1 注册回调 当这个视图被调用时 点击并按住。如果这个观点不 长可点击,变长 可点击。

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

【讨论】:

  • 谢谢!我试的时候一定是植入错了。长按有效,但它仍然执行短按方法,有什么想法吗?
  • 你的意思是两者都做还是只调用short方法?这是什么版本的android?
  • 在 Android 2.2 上两者兼有:\
  • 哦,没关系,只需将返回 false 更改为 true :)
  • 感谢您的更正,编辑了答案。很高兴它成功了。
【解决方案2】:

为了让这两个功能都适用于可响应短按和长按的可点击图像,我尝试了以下似乎可以完美运行的方法:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在 longClickListener 中将 return false; 更改为 return true;

      你长按按钮,如果它返回 true,那么它就完成了工作。如果它返回 false 那么它就可以工作并且还调用短点击然后 onClick 也可以工作。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 长按还是两者兼有?
        • 这个答案描述性不够,没有用处。您如何建议使用 onTouchListener 来检测长按?
        • 我同意西蒙的观点——但是;您可以计算 MotionEvent.DOWN 和 MotionEvent.UP 之间的时间
        【解决方案6】:

        最简单和更新的方法是使用长点击监听器

        someView.setOnLongClickListener {
                //do your work 
                true
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-15
          • 1970-01-01
          • 1970-01-01
          • 2017-10-31
          相关资源
          最近更新 更多