Java 按钮未在第一次单击时调用OnClickListener

Java 按钮未在第一次单击时调用OnClickListener,java,android,xml,button,Java,Android,Xml,Button,我正在尝试在页面中开发一个,在那里我有用户名、密码和一个按钮。当我第一次点击按钮时,什么也没有发生,但是当我第二次点击按钮时,它就正常工作了。我很困惑,为什么会这样 activity_login.xml 您正在设置android:focusableInTouchMode=“true” 因此,在第一次单击时,它将获得焦点 参考是的,是的,我得到了答案,经过大量的RND,我得到了解决方案,我只需要实现setOnClickListener()和setOnFocusChangeListener()。所以

我正在尝试在页面中开发一个,在那里我有用户名、密码和一个按钮。当我第一次点击按钮时,什么也没有发生,但是当我第二次点击按钮时,它就正常工作了。我很困惑,为什么会这样

activity_login.xml


您正在设置android:focusableInTouchMode=“true” 因此,在第一次单击时,它将获得焦点


参考

是的,是的,我得到了答案,经过大量的RND,我得到了解决方案,我只需要实现setOnClickListener()和setOnFocusChangeListener()。所以我把解决方案放在这里

ActivityLogin.java

activity_login.xml


设置此项-

android:focusableInTouchMode="true"
为此—

android:focusableInTouchMode="false"
打开按钮

说明-如果要使按钮可聚焦,则在第一次单击时,焦点将传递给按钮,然后在第二次触摸时,单击将传递给按钮。EditText是一个可聚焦视图,它首先获得焦点,因此其他视图必须首先从EditText重新获得焦点,除非它们不需要焦点来工作,就像按钮一样。如果您只需要OnClick函数,那么您不需要焦点,因此您可以多点击一次


PS:虽然不需要,但是如果第一个不起作用,将android:focusable设置为false也会有帮助。

如果在xml in按钮、img或线性布局中:

android:focusableInTouchMode="true"
要解决,只需
删除此项。

我建议在“onCreate()方法”中使用请求焦点

当您使用android:focusableInTouchMode=“true”时,您可能不希望焦点被“EditText”字段捕获

例如: 1.活动有一个视图contain->android:focusableInTouchMode 2.您打开了一个片段对话框,但“后退”按钮需要单击两次才能触发它。
3.您应该在片段对话框onCreateView()之后调用requestFocus()

使用Logger在logcat中查看它是否正在输入方法。你会发现这不是因为focusableInTouchMode参数。那么我应该怎么做,请帮助我??也许我对这个类似问题的回答可能会有所帮助:我删除了android:focusableInTouchMode=“true”,但它仍然无法正常工作。你是否重建了项目,然后进行了部署?不,我在现有项目中删除它。]除非启用了自动生成。要使更改生效,您需要重新生成项目。所以,重新构建您的项目,然后再试一次。我从来都不知道该属性的用途是什么。非常感谢。所以您基本上是在OnFocus()方法上调用onClick()。禁用焦点应该也能起到同样的作用,但很高兴这能起到作用。实际上对我的问题很有效。我需要该按钮是可聚焦的,这样我的editText views onFocusChange事件在我单击该按钮时被触发,而且我还需要在第一次单击时触发button click事件。如果我移除了它的焦点,edittext不会失去它的焦点,它的事件也不会触发,如果没有焦点更改侦听器,它必须被按下两次。所以,谢谢你:)
  <Button
        android:id="@+id/buttonLogin"
        style="@style/Button1"

        android:text="continue"
         />
android:focusableInTouchMode="true"
android:focusableInTouchMode="false"
android:focusableInTouchMode="true"