【问题标题】:OnClickListener gets triggered when button in another place当按钮在另一个地方时触发 OnClickListener
【发布时间】:2014-01-13 11:50:06
【问题描述】:

我的应用中有四个ImageButtons。

三个较小的按钮可以显示或“隐藏”在较大的按钮下方。我使用旋转和翻译动画隐藏按钮。

问题是: 无论是否显示较小的按钮,OnClickListeneronClick 方法总是会被触发。

我的意思是,当较小的按钮被“隐藏”时,触摸屏幕上的位置,其中一个较小的按钮在显示时所在的位置,会触发 onClick 方法。

在决定是否应该触发onClick 方法时,Android 操作系统似乎没有考虑按钮的实际位置。

我该如何解决这个问题?

我希望onClick 方法仅在我的手指下方有按钮时被调用。

编辑:

所有建议的解决方法都依赖于隐藏按钮。这根本没有帮助。 onClick 方法也被调用 INVISIBLEGONE 按钮。我在调试器中检查了这个。

【问题讨论】:

  • 可能是参考问题..您的按钮在点击时可能没有得到正确的参考。
  • 在onClick中添加条件if(view.isShown()){// perform opertaions}
  • @AndroidHacker 我不确定你在说什么。你愿意详细说明一下吗?
  • @Sunny 这无济于事,因为该按钮已显示(只是移动到其他按钮下方)。
  • 即您可能没有在点击时获得视图。如果您设法在此处发布代码,我可以更具体地说明这一点

标签: android onclicklistener imagebutton


【解决方案1】:

看起来您要使用 Arc 菜单。为什么不使用 SiyamedDaCapricorn 的出色实现,而不是重新发明轮子?

【讨论】:

  • 感谢您的链接。项目看起来很棒,我可能会在我的其他应用程序之一中使用它们。
【解决方案2】:

您是否将您的点击界面设置为您的活动并实现了 onClickListener?如果是这样,您需要通过为所有按钮设置 if(arg0 == button1) 等条件来分隔按钮。

【讨论】:

    【解决方案3】:

    问题是由补间动画(原始动画框架)动画像素而不是小部件的触摸区域引起的。

    我已将补间动画替换为 property animations,现在一切正常。

    【讨论】:

      【解决方案4】:

      设置

      btn.setVisibility(View.INVISIBLE);
      

      在按钮不可见的地方不调用 onClick 方法。我已经测试过了。所以你可能会在不必要的视图中注册 onClick 监听器。

      【讨论】:

      • 我检查了,我得到 onClick 调用隐藏按钮。
      • 现在没有代码几乎不可能回答?只需显示代码的一些相关部分
      【解决方案5】:

      尝试使用layout.xml中按钮的onClick属性设置监听器(例如

      android:onClick="onClickButtonCamera"
      

      然后声明一个同名的公共函数,如:

      public void onClickButtonCamera(View view) {
          //some stuff...
      }
      

      我总是使用它,并且在隐藏按钮时永远不会调用该函数。 希望对你有帮助。

      【讨论】:

        【解决方案6】:

        我认为有三种方法可以解决这个问题。

        1) 如果您正在设置 onClick 侦听器,则在隐藏按钮时将其设置为 null,并在显示按钮时设置侦听器。

        2) 为每个按钮添加一个关于它们的可见性的检查 onclick 只需返回;按钮可见性不可见时的功能(使用功能 button.getVisibility() != View.VISIBLE)

        3)最后一个不确定,通常设置为可见性会防止点击。

        【讨论】:

          【解决方案7】:

          我建议在完成动画后将按钮可见性设置为 GONE。

          更新:

          另一个建议是有一个没有动画的按钮(问题不应该发生)和一个在按钮隐藏后动画的图像(图形相同)。图片不应该收到任何点击,无论是否在大按钮下,真正的按钮在隐藏时不应该收到点击。

          【讨论】:

          • 不幸的是,这没有帮助。该按钮被隐藏但 onClick 被调用。
          • 你确定响应点击的是按钮吗?我可以想象按钮上方的透明点击区域,关注所有点击和重定向调用的父视图等。传递给 onClick 的视图是什么? new Exception().printStackTrace() 打印的堆栈跟踪中的内容是什么?
          • onClick处理程序中,视图是图像按钮,v.isShown() == falsev.getVisibility == 4(或8)
          • 然后忽略来自v.isShown() == false的按钮的点击
          • 或者,将其“可点击”设置为 false。
          猜你喜欢
          • 2020-08-01
          • 2021-07-18
          • 2016-11-12
          • 2015-01-20
          • 2011-11-23
          • 2018-12-04
          • 2023-01-25
          • 2011-05-18
          • 2017-02-19
          相关资源
          最近更新 更多