Android按钮非法状态onClick异常(MainActivity)

Android按钮非法状态onClick异常(MainActivity),android,Android,android是全新的。我有一个按钮,用来触发onClick方法,它是onClick侦听器使用的onClick方法的重写。问题是,当我按下按钮时,抛出一个IllegalStateException,表示无法找到按钮XML中定义的onClick(MainActivity)方法 下面的代码是引发IllegalStateException的代码。但是,如果我将按钮的XML更改为android:onClick=“onClick”,那么按钮就可以完全正常工作。为什么会这样 按钮XML: <Butto

android是全新的。我有一个按钮,用来触发onClick方法,它是onClick侦听器使用的onClick方法的重写。问题是,当我按下按钮时,抛出一个IllegalStateException,表示无法找到按钮XML中定义的onClick(MainActivity)方法

下面的代码是引发IllegalStateException的代码。但是,如果我将按钮的XML更改为android:onClick=“onClick”,那么按钮就可以完全正常工作。为什么会这样

按钮XML:

<Button
    android:text="Accept"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText2"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="84dp"
    android:id="@+id/button2"
    android:onClick="onClick (MainActivity)" />
为什么会这样

因为android:onClick=“onClick”是正确的语法。以下语法都不正确:

  • android:onClick=“onClick(MainActivity)”
  • android:onClick=“onClick(视图)”
  • android:onClick=“onClick(视图)”
  • android:onClick=“onClick和其他任何东西”
引述:

单击视图时要调用的此视图上下文中的方法的名称。此名称必须对应于只接受一个View类型参数的公共方法。例如,如果指定android:onClick=“sayHello”,则必须声明上下文(通常是活动)的公共void sayHello(视图v)方法


好的,在推特上@HappyRavi的帮助下,我能够。这是一个IDE错误,如果您按特定顺序操作,您将遇到:

  • 添加要将单击事件路由到的方法
  • 按钮
    拖动到GUI编辑器中
  • 单击GUI编辑器属性窗格中的
    onClick
    下拉列表
以不同的顺序做事不会重现问题


幸运的是,他们可以在Android Studio 2.3的某些补丁版本中修复这个问题。

应该像下面这样实现

<Button
android:text="Accept"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="84dp"
android:id="@+id/button2"
android:onClick="buttonClickHandler" />//name of method should be given here

只有在
活动
类中添加了该方法时,该方法才有效,而不使用
片段

Android Studio现在自动插入的
(MainActivity)
,或者类似的东西的可能重复项?这不是我看到的第一篇关于这一点的文章,语法完全相同。@MikeM:如果是,我很难复制它(测试为2.2.3)。如果你想办法复制它,提出一个问题,如果你想到了,请告诉我。也许只是一群用户在某个地方模仿一个坏例子。谢谢你的登记。上面的代码“onClick(MainActivity)”是Android Studio自动生成的。我假设它是在创建onClick覆盖时生成的,但我可能错了。无论哪种方式,这都是自动显示的内容,也是我的大学讲师指示我在按钮的onClick字段中使用的内容,所以我很困惑,当我严格按照给出的指示操作时,它为什么会产生错误。仅供参考,看起来它已经被报告了好几次。
<Button
android:text="Accept"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="84dp"
android:id="@+id/button2"
android:onClick="buttonClickHandler" />//name of method should be given here
public void buttonClickHandler(View view) {
  //handle button click here
}