Android自定义View的长按事件的思考

本文探讨如何在Android自定义View中处理长按事件,建议在dispatchTouchEvent中进行判断,以遵循公共View的原则。长按事件通常通过Runnable和Handler实现。文章还涉及View的分发机制,解释为何不应在onTouchEvent或onInterceptTouchEvent中判断长按,因为这可能导致事件处理问题。最后,强调dispatchTouchEvent是最佳选择,因为它能确保每次事件都能得到适当处理。
摘要由CSDN通过智能技术生成
    在写自定义view的时候经常会遇到需要为其添加长按事件的情况,当然,这里分几种情况,比如该自定义view如果是继承自listView或者是gridView的话,可以直接为其建立一个长按监听器:
  listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {  
    @Override  
    public boolean onItemClick(AdapterView<?> parent, View view,int position, long id) {  
      
    // Do something  
    return true.  
}
    但是,如果设立长按监听之后会与短按监听冲突,这里有两种情形,第一种是如果长按监听是弹出一个dialog之类的窗口视图的话,那么此时不会再进入端按监听的形式,此时可以不用对监听冲突进行处理。当然,第二种情形就是窗口视图之外的操作,这时候可以设置一个布尔型的全局变量,因为长按时一般会先触发长按事件,然后再触发短按事件,我们在二者中分别给布尔变量赋予不用的值并在短按事件里做个判断就行了,伪代码如下:
  gridView.setOnItemLongClickListener(new OnItemLongClickListener(){//设置事件监听(长按)
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
longPress=true;
//执行操作
}
}
//设置事件监听(短按)
gridView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
If(longPress)
{
longPress=false;
break;
}
else
{
longPress=false;
//执行操作
}
}
}

    可是,在实际操作中,比如公司希望你开发一个公用的自定义view,并且因为业务需求刚好需要用到长按事件的话,此时如果还是采用需要人为的设立监听器的方式,会违背了公用view的基本原则,因此比较妥当的方式是在自定义view的分发过程中对其长按操作进行判断,而长按事件的发生可以采用runnable和handler(view里有自带的handler)的形式,这是目前通用的处理方式,也是

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值