Android Studio中performClick触发按钮点击无效问题求助
解决Android中performClick()无效的问题
嘿,作为新手遇到这种问题太正常啦,我来帮你拆解一下原因和解决办法!
问题根源
你现在的代码里,enemy_left只设置了OnTouchListener,而且在onTouch方法里返回了true——这就等于告诉系统:“这个触摸事件我已经处理完了,不用再往下传递啦”。而performClick()默认是用来触发**OnClickListener**的回调逻辑的,你既没给按钮设置OnClickListener,又用OnTouchListener拦截了事件,所以调用performClick()自然没反应。
另外,你想触发的其实是MotionEvent.ACTION_DOWN时执行的run(1)逻辑,直接调用performClick()其实是绕远路了,咱们可以更直接地解决问题。
解决方案1:直接调用目标逻辑(最简单)
既然你在if(bida1<kontra1)分支里想执行的是和触摸按下时一样的操作,那直接调用run(1)就好,完全不需要通过performClick():
if(bida1 < kontra1){ run(1); // 直接执行你想要的逻辑,一步到位 }
解决方案2:让performClick()生效(如果一定要用这个方法)
如果你坚持要通过performClick()来触发,那需要调整两个地方:
- 给
enemy_left添加OnClickListener,把run(1)的逻辑移到里面 - 修改
OnTouchListener的返回值,让事件能传递到OnClickListener
修改后的代码示例:
// 先设置OnClickListener enemy_left.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { run(1); // 把原来ACTION_DOWN的逻辑放在这里 } }); // 再调整OnTouchListener enemy_left.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (motionEvent.getAction() == MotionEvent.ACTION_DOWN){ // 这里可以留空,或者继续调用run(1),看你需求 }else if (motionEvent.getAction() == MotionEvent.ACTION_UP){ standby(1); } enemy.setScaleX(-1f); float x = enemy.getX(); float n = 5.00f; float v = x - n; enemy.setX(v); // 返回false,让事件能继续传递给OnClickListener return false; } }); // 现在调用performClick()就会触发OnClickListener的逻辑了 if(bida1 < kontra1){ enemy_left.performClick(); }
额外提醒
以后遇到触摸和点击事件的问题,要记住:OnTouchListener的返回值决定了事件是否会继续传递。如果返回true,后续的事件(比如点击)就不会被触发;返回false,系统会继续把事件分发给其他监听(比如OnClickListener)。
内容的提问来源于stack exchange,提问作者Prince Ivann Jov
相关产品推荐
相关产品推荐

