微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MaterialTextView无法转换为com.google.android.material.textfield.TextInputEditText

如何解决MaterialTextView无法转换为com.google.android.material.textfield.TextInputEditText

我意识到这是一条相当普通的错误消息,可能有一个简单的解决方法,但是我缺少了一些东西,可能需要另一双眼睛:

2020-09-25 17:09:29.006 ... E/AndroidRuntime: FATAL EXCEPTION: main
    ...
    java.lang.classCastException: com.google.android.material.textview.MaterialTextView cannot be cast to com.google.android.material.textfield.TextInputEditText
        at ...MessagesFragment$onViewCreated$1$$special$$inlined$apply$lambda$1.onClick(MessagesFragment.kt:171)
        at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

片段中的相关代码

fab.setonClickListener {
    MaterialAlertDialogBuilder(it.context).apply {
        setView(R.layout.dialog_messages)
        setPositiveButton("Add") { dialog,which ->
            Log.d(TAG,"Message is ${message.text.toString()}!")
        }
        setNegativeButton("Remove") { dialog,which ->

        }
        setNeutralButton("Cancel",null)
    }.show()
}

崩溃指向以下行:

Log.d(TAG,"Message is ${message.text.toString()}!")

对话框/ setView的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/linearLayout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Message" >

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </com.google.android.material.textfield.TextInputLayout>

</LinearLayout>

感谢迅速的线索棒!

解决方法

问题源于使用kotlin的合成方法访问错误的视图。实际上,message是指另一种视图,而不是dialog_messages内部的视图。

最简单的方法是先膨胀对话框的视图,以便能够访问其包含的视图(例如 dialogView.message.text.toString()),然后使用setView(view: View)函数而不是{ {1}}:

setView(layoutId: Int)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。