在androidx.appcompat.widget.TintContextWrapper中找不到MaterialButton中onClick处理程序的自定义方法

时间:2019-01-03 19:39:38

标签: android

我最近将我的应用程序移植到了材料设计中,并且开始收到奇怪的错误提示,表明在活动中找不到方法(它们在过去3年左右都没有出现),并且一切都以崩溃告终。这似乎仅发生在运行Android 4。*(4.0.2、4.2、4.4),各种设备(三星和LG)的用户上,任何解决该问题的建议都值得赞赏! :)

完整错误消息:

  

致命异常:java.lang.IllegalStateException找不到   活动类中的方法 onCancelClicked (View)   用于onClick处理程序的androidx.appcompat.widget.TintContextWrapper   查看ID为的类com.google.android.material.button.MaterialButton   ' btnCancel '

     

(...)

     

由java.lang.NoSuchMethodException引起onCancelClicked [class   android.view.View]

斜体部分是自定义方法,请参见下面的布局

    <com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.TextButton"
        android:id="@+id/btnCancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:onClick="onCancelClicked"
        android:text="@string/dialog_conf_code_cancel" />

处理此布局的活动实现了AppCompatActivity,而onCancelClicked很简单,如下所示:

public void onCancelClicked(View v) {
    this.finish();
}

对于使用这种方式实现的其他按钮,我也再次遇到类似的错误-到目前为止,仅适用于使用Android 4. *的 some 用户。

我在build.gradle中的依赖关系定义如下

dependencies {
    implementation 'com.google.android.material:material:1.0.0'
    androidTestImplementation 'androidx.test:runner:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    implementation 'com.google.android.gms:play-services-ads:16.0.0'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.google.firebase:firebase-core:16.0.5'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.6'
    implementation 'com.android.support:appcompat-v7:28.2.0'
    implementation 'com.android.support:design:28.2.0'
}

再次-任何建议将不胜感激! :)

1 个答案:

答案 0 :(得分:1)

检查了几个看似相关的链接后,最好的做法是从XML布局中删除所有android:onClick并附加Java中的点击侦听器。

我对此的感觉是,目前尚不清楚是Android和AndroidX的哪种组合引起的。因此,在Java中设置侦听器似乎是最好的解决方案,因为它可以完全避免该问题。

另请参阅: