AppCompatButton android:onClick Could not find a method exception AppCompatButton安卓:单击事件未找到方法异常

5
我只在KitKat版本上遇到了这个问题,从API 16级到25级的其它版本都可以正常工作。
实例化布局的类具有布局方法,例如:
<android.support.v7.widget.AppCompatButton
  android:onClick="onClick"
...
public void onClick(View v) {
  // do something
}

我知道我可以将它更改为侦听器、数据绑定或使用像Butterknife这样的库,但我想知道为什么在4.X版本上只会崩溃?

XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClick" />

    <android.support.v7.widget.AppCompatButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClick" />
</LinearLayout>

你不必使用 AppCompatButton。当你在布局中使用 Button 时,它会自动被使用。https://developer.android.com/reference/android/support/v7/widget/AppCompatButton.html - Sharjeel
@Sharj,我刚测试了使用Button也失败了。 - rkmax
你能展示完整的XML文件吗? - vmtrue
@fisher3421 我已经更新了问题并附上了XML。 - rkmax
还没有人找到答案吗? - jordansilva
显示剩余2条评论
2个回答

3
我找到了这个问题的解释。它被归档为 bug。以下是 bug 报告链接:https://issuetracker.google.com/issues/37108938 简而言之,他们说这个问题在 API 24 中已经被修复,而 onClick 不兼容支持库。我在关于 kitkat 问题的线程中添加了评论。

0

有一个解决方法。它在API 19上经过测试,运行良好。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClick" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/appCompatButtonStyle"   // Note this
        android:text="Button"
        android:onClick="onClick" />
</LinearLayout>

还有在你的styles.xml文件中

<style name="appCompatButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="backgroundTint">@color/colorWhite</item>
    <item name="android:textColor">@color/colorMaterialGrey</item>
</style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接