问题:在给View设置点击事件的时候报错,具体如下:
java.lang.IllegalStateException: Could not find method certificateClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatImageView with id 'iv_certificate_request_scan'
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:424)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:381)
at android.view.View.performClick(View.java:7260)
at android.view.View.performClickInternal(View.java:7222)
at android.view.View.access$3800(View.java:825)
at android.view.View$PerformClick.run(View.java:27725)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:227)
我在代码中是使用onClick绑定代码中的点击事件
<ImageView
android:id="@+id/iv_certificate_request_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="certificateClick"
android:paddingLeft="@dimen/es_pitch5"
android:paddingTop="@dimen/es_pitch12"
android:paddingRight="@dimen/es_pitch12"
android:paddingBottom="@dimen/es_pitch12"
android:src="@mipmap/icon_scan_gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
代码中的监听事件
private fun certificateClick(view: View){
when(view.id){
//扫描编号
R.id.iv_certificate_request_scan -> {
openCapture(true)
}
//选择门店
R.id.chl_certificate_request_store -> {
MDRouters.Builder().build(RouterTable.ENDORSE_SELECT_STORE).requestCode(SELECT_STORE).create(this).go()
}
//提交
R.id.btn_certificate_request_submit -> {
}
}
}
然后发现代码中的点击事件函数名是灰色的==,没有被使用的,所以看到这里使用了private关键字,把private去掉,就看到函数名变成黄色,说明已经被使用了,结果一运行确实可以