Что вызывает эту ошибку приведения LinearLayout? - PullRequest
1 голос
/ 29 марта 2020

Я изучаю Kotlin после исключительно работы в Java ранее, и я столкнулся с небольшой ошибкой, которую не могу исправить.

Я пытался реализовать RecyclerView, и все мои усилия потерпели неудачу. Я даже скопировал \ вставил код со страницы для разработчиков , чтобы увидеть, что я делаю неправильно, только чтобы столкнуться с той же проблемой. Прошло уже несколько часов, и я в замешательстве.

Почему я получаю эту ошибку из кода, который находится прямо со страницы разработчика \ как мне ее исправить?

MyAdapter.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

1 Ответ

2 голосов
/ 29 марта 2020

Макет root R.layout.my_text_view, вероятно, LinearLayout (вы также должны опубликовать файл макета). Вы надуваете макет и преобразуете root представление в 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...