首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OnTouch可以工作,但OnClickListener不能?

OnTouch可以工作,但OnClickListener不能?
EN

Stack Overflow用户
提问于 2011-03-12 23:08:31
回答 7查看 21.8K关注 0票数 21

我创建了一个可以重用的小部件/控件,它是通过扩展RelativeLayout创建的。然后,在我的一个活动中,我在一个循环中创建了一堆这样的小部件。然而,当我想让每个小部件都响应点击时,我遇到了一个问题。

我发现设置OnTouchListener是可行的:

代码语言:javascript
复制
 this.setOnTouchListener(new OnTouchListener(){
        public boolean onTouch(View arg0, MotionEvent arg1) {
           //Triggers debug message
        }       
    });

OnClickListener并非如此:

代码语言:javascript
复制
  this.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
           //Doesn't trigger debug message  
        }

    });

为什么会这样呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-12 23:34:01

以下是一些检查,以确保您的视图是可点击的:

代码语言:javascript
复制
View.setClickable()
View.setEnabled()
View.setFocusable()
View.setFocusableInTouchMode()

根据您希望获得的确切行为,您需要将其中一个或多个设置为on。因为你得到的是onTouch事件,我猜你需要setClickable。但我必须查看视图创建代码才能确定。

票数 17
EN

Stack Overflow用户

发布于 2011-03-12 23:37:29

你应该确保TouchListener没有“消费”触摸事件。如果你从onTouch()方法返回true,安卓将认为它被消耗了,而不会把它传递给其他各种触摸处理程序(我假设它会包括ClickListener)。

您应该执行以下操作:

代码语言:javascript
复制
this.setOnTouchListener(new OnTouchListener(){
    public boolean onTouch(View arg0, MotionEvent arg1) {
        //Triggers debug message
        return false;
    }       
});
票数 51
EN

Stack Overflow用户

发布于 2012-04-26 13:55:24

要在onTouch()中执行此返回false,如下所示:

代码语言:javascript
复制
this.setOnTouchListener(new OnTouchListener(){    
        public boolean onTouch(View arg0, MotionEvent arg1) {   
            return false;
        }       
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5283293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档