1

在之前专门使用 Java 工作后,我正在学习 Kotlin,但我遇到了一些似乎无法修复的令人困惑的错误。

我试图实现 a RecyclerView,但我所做的一切努力都失败了。我什至从开发人员页面复制\粘贴代码以查看我做错了什么,只是遇到了同样的问题。在这一点上已经有几个小时了,我很难过。

为什么我从直接来自开发页面的代码中收到此错误\如何修复它?

我的适配器.kt

import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class MyAdapter(private val myDataset: Array<String>) :
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder.
    // Each data item is just a string in this case that is shown in a TextView.
    class MyViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)

    // Create new views (invoked by the layout manager)
    override fun onCreateViewHolder(parent: ViewGroup,
                                    viewType: Int): MyAdapter.MyViewHolder {
        // create a new view
        val textView = LayoutInflater.from(parent.context)
            .inflate(R.layout.my_text_view, parent, false) as TextView
        // set the view's size, margins, paddings and layout parameters

        return MyViewHolder(textView)
    }

    // Replace the contents of a view (invoked by the layout manager)
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.textView.text = myDataset[position]
    }

    // Return the size of your dataset (invoked by the layout manager)
    override fun getItemCount() = myDataset.size
}

来自 logcat 的错误

java.lang.ClassCastException: android.widget.LinearLayout 不能转换为 android.widget.TextView

4

1 回答 1

2

的根布局R.layout.my_text_view可能是一个LinearLayout(您也应该发布布局文件)。您正在膨胀布局并将根视图转换为TextView.

您应该使用

val rootView = LayoutInflater.from(parent.context).inflate(R.layout.my_text_view, parent, false)

TextView然后使用类似这样的方式获取对此布局内部的引用

val textView = rootView.findViewById<TextView>(R.id.[your-textview-id])
于 2020-03-29T10:41:05.060 回答