Kotlin 为什么我的子模型不能转换为java.util.ArrayList

Kotlin 为什么我的子模型不能转换为java.util.ArrayList,kotlin,android-recyclerview,Kotlin,Android Recyclerview,我正在使用多级数据创建一个recyclerview,将数据输入子适配器时出现问题。出现如下错误“模型无法转换为java.util.ArrayList android” 我的json [{ "header" : "buah air", "sub" : { "warna" : "merah", "jenis" : "air" } },{ "header" : "bua

我正在使用多级数据创建一个recyclerview,将数据输入子适配器时出现问题。出现如下错误“模型无法转换为java.util.ArrayList android”

我的json

[{
    "header" : "buah air",
    "sub"    : {
                "warna" : "merah",
                "jenis" : "air"
               }
     },{
    "header" : "buah serat",
    "sub"    : {
                "warna" : "hijau",
                "jenis" : "serat"
               }

}]
我的模型

data class mTOP (
    val header : String,
    @SerializedName("sub") val sub : mSubTOP
)

data class mSubTOP(
    val warna : String,
    val jenis : String
)
我的主要活动

val adapter =  adapter_top(response!!.body() as ArrayList<mTOP>)
rv.adapter = adapter
val adapter=adapter\u top(响应!!.body()作为ArrayList)
rv.适配器=适配器
我的适配器\u top(此处发生错误)

覆盖BindViewHolder(holder:adapter\u top.ViewHolder,位置:Int){
holder.tvHeader?.text=Datane[position]。header
holder.rvList?.layoutManager=LinearLayoutManager(holder.rvList.context,LinearLayout.VERTICAL,false)
var adapterSub=适配器(Datane[position].sub作为ArrayList)
保持架.rvList?.adapter=adapterSub
}
我的适配器

class adapter_sub(val Datane: ArrayList<mSubTOP>): RecyclerView.Adapter<adapter_sub.ViewHolder>() {

}
class adapter_sub(val Datane: ArrayList<mSubTOP>): RecyclerView.Adapter<adapter_sub.ViewHolder>() {

    override fun onBindViewHolder(holder: adapter_sub.ViewHolder, position: Int) {
        val location = Datane[position]
        holder.tvName?.text = location.warna
        holder.tvHobi?.text = location.jenis

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): adapter_sub.ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.layout_sub, parent, false)
        return ViewHolder(v)
    }

    override fun getItemCount(): Int {
        return Datane.size
    }

    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        val tvName = itemView.findViewById<TextView>(R.id.tvJenis)
        val tvHobi = itemView.findViewById<TextView>(R.id.tvWarna)
    }
}
class adapter\u sub(val-Datane:ArrayList):RecyclerView.adapter(){
}

因为它根本不是
数组列表:)您必须创建一个包含一个元素的列表:

adapter_sub(arrayListOf(Datane[position].sub))

这就完成了我的适配器

class adapter_sub(val Datane: ArrayList<mSubTOP>): RecyclerView.Adapter<adapter_sub.ViewHolder>() {

}
class adapter_sub(val Datane: ArrayList<mSubTOP>): RecyclerView.Adapter<adapter_sub.ViewHolder>() {

    override fun onBindViewHolder(holder: adapter_sub.ViewHolder, position: Int) {
        val location = Datane[position]
        holder.tvName?.text = location.warna
        holder.tvHobi?.text = location.jenis

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): adapter_sub.ViewHolder {
        val v = LayoutInflater.from(parent.context).inflate(R.layout.layout_sub, parent, false)
        return ViewHolder(v)
    }

    override fun getItemCount(): Int {
        return Datane.size
    }

    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        val tvName = itemView.findViewById<TextView>(R.id.tvJenis)
        val tvHobi = itemView.findViewById<TextView>(R.id.tvWarna)
    }
}
class adapter\u sub(val-Datane:ArrayList):RecyclerView.adapter(){
覆盖BindViewHolder(支架:适配器\子视图支架,位置:Int){
val位置=数据元[位置]
holder.tvName?.text=location.warna
holder.tvHobi?.text=location.jenis
}
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):适配器\子组件ViewHolder{
val v=LayoutFlater.from(parent.context)。充气(R.layout.layout_sub,parent,false)
返回视窗支架(v)
}
重写getItemCount():Int{
返回Datane.size
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
val tvName=itemView.findviewbyd(R.id.tvJenis)
val tvHobi=itemView.findviewbyd(R.id.tvWarna)
}
}

布局活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/RvMain"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" >

    </androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>

layout_top.xml

<?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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tvHeader"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_marginTop="16dp"
                android:gravity="center_vertical"
                android:text="Date"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Large"
                android:textColor="#009688"
                android:textSize="18sp" />

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvItem"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="8dp"
                android:layout_marginStart="8dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

            </androidx.recyclerview.widget.RecyclerView>

        </LinearLayout>

    </androidx.cardview.widget.CardView>

</LinearLayout>

layout\u sub.xml

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="10dp">

        <TextView
            android:id="@+id/locationBadge"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@drawable/circle_badge"
            android:gravity="center_vertical|center_horizontal"
            android:text="✓"
            android:textColor="#fff"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="10dp">

            <TextView
                android:id="@+id/tvWarna"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="Name"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/tvJenis"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                android:text="Address"
                android:textSize="16sp" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

这是我的堆栈跟踪

10-20 06:24:08.445 11624-11624/br.com.mirabilis.jambu_air E/AndroidRuntime: FATAL EXCEPTION: main
    Process: br.com.mirabilis.jambu_air, PID: 11624
    android.view.InflateException: Binary XML file line #14: Binary XML file line #14: Error inflating class TextView
        at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at br.com.mirabilis.jambu_air.adapter.adapter_sub.onCreateViewHolder(adapter_sub.kt:23)
        at br.com.mirabilis.jambu_air.adapter.adapter_sub.onCreateViewHolder(adapter_sub.kt:13)
        at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3336)
        at android.view.View.measure(View.java:18811)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18811)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at androidx.cardview.widget.CardView.onMeasure(CardView.java:260)
        at android.view.View.measure(View.java:18811)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
        at android.view.View.measure(View.java:18811)
        at androidx.recyclerview.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:9119)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1583)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
        at android.view.View.layout(View.java:16653)
        at android.view.ViewGroup.layout(ViewGroup.java:5438)
        at android.widget.LinearLayout.setCh
10-20 06:24:08.448 11624-11624/br.com.mirabilis.jambu_air E/MQSEventManagerDelegate: failed to get MQSService.
10-20 06:24:08.473 11624-11624/br.com.mirabilis.jambu_air I/Process: Sending signal. PID: 11624 SIG: 9

好的,谢谢,你的建议消除了错误。但是如果您想看到“二进制XML文件行#14:二进制XML文件行#14:错误膨胀类文本视图”,请执行一个新错误。您可以将布局附加到问题上吗?布局看起来正常。你能附上你的错误的堆栈跟踪吗?这真的很奇怪。从我的观点来看,一切看起来都不错。您可以尝试从
layout_sub.xml
中的第一个
TextView
中删除一些属性,以找出导致崩溃的确切原因。你是对的。我删除了第一个文本视图,一切正常。非常感谢你的帮助。