uni-app 原生button对象绑定onTouch事件闪退

uni-app 原生button对象绑定onTouch事件闪退

示例代码:

var btn = new Button(appContext);    
var listener = plus.android.implements("android.view.View$OnTouchListener",{    
            onTouch:function(view,event){    
                  console.log(123)    
            return true;    
       }    
 });  
plus.android.invoke(btn, 'setOnTouchListener', listener);

操作步骤:

预期结果:

可正常触发拖动事件

实际结果:

应用闪退

bug描述:

创建按钮后,添加事件,点击事件正常触发,拖动事件一点按钮过一秒左右就自动闪退


更多关于uni-app 原生button对象绑定onTouch事件闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 原生button对象绑定onTouch事件闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用原生 button 组件并绑定 onTouch 事件时,如果出现闪退问题,可能是由于以下原因导致的:

1. 事件绑定方式错误

  • uni-app 中的原生 button 组件并不直接支持 onTouch 事件。如果你尝试绑定不支持的事件,可能会导致应用崩溃。
  • 正确的做法是使用 button 组件支持的事件,例如 @click@touchstart@touchend 等。

2. 事件处理函数未定义或错误

  • 如果你绑定了事件,但事件处理函数未定义或函数内部存在错误,也可能导致闪退。
  • 确保事件处理函数正确定义,并且没有逻辑错误。

3. 平台差异

  • uni-app 是一个跨平台框架,不同平台(如微信小程序、H5、App)对事件的支持和处理方式可能有所不同。
  • 确保你使用的事件和代码在所有目标平台上都兼容。

解决方案

1. 使用正确的事件

使用 button 组件支持的事件,例如 @click

<template>
  <button @click="handleClick">点击我</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log('按钮被点击了');
    }
  }
}
</script>

2. 检查事件处理函数

确保事件处理函数正确定义,并且没有逻辑错误:

<template>
  <button @touchstart="handleTouchStart" @touchend="handleTouchEnd">触摸我</button>
</template>

<script>
export default {
  methods: {
    handleTouchStart() {
      console.log('触摸开始');
    },
    handleTouchEnd() {
      console.log('触摸结束');
    }
  }
}
</script>

3. 处理平台差异

如果你需要在不同平台上使用不同的事件处理方式,可以使用条件编译:

<template>
  <button 
    @click="handleClick"
    @touchstart="handleTouchStart"
    @touchend="handleTouchEnd"
  >按钮</button>
</template>

<script>
export default {
  methods: {
    handleClick() {
      console.log('点击事件');
    },
    handleTouchStart() {
      // #ifdef H5
      console.log('触摸开始 (H5)');
      // #endif
      // #ifdef MP-WEIXIN
      console.log('触摸开始 (微信小程序)');
      // #endif
    },
    handleTouchEnd() {
      // #ifdef H5
      console.log('触摸结束 (H5)');
      // #endif
      // #ifdef MP-WEIXIN
      console.log('触摸结束 (微信小程序)');
      // #endif
    }
  }
}
</script>
回到顶部