有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 kotlin java。lang.ClassCastException

RecyclerView多视图类型错误

FATAL EXCEPTION: main
       Process: com.example.expertsaraqeb.myapplication, PID: 4329
       java.lang.ClassCastException: com.example.expertsaraqeb.myapplication.Madapter$MyHolder cannot be cast to com.example.expertsaraqeb.myapplication.MyViewH
06-05 07:00:35.897 4329-4329/com.example.expertsaraqeb.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.example.expertsaraqeb.myapplication, PID: 4329
   java.lang.ClassCastException: com.example.expertsaraqeb.myapplication.Madapter$MyHolder cannot be cast to com.example.expertsaraqeb.myapplication.MyViewH
       at com.example.expertsaraqeb.myapplication.Madapter.onBindViewHolder(Madapter.kt:27)
       at com.example.expertsaraqeb.myapplication.Madapter.onBindViewHolder(Madapter.kt:11)
       at 安卓.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356)
       at 安卓.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389)
       at 安卓.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335)
       at 安卓.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598)
       at 安卓.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
       at 安卓.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
       at 安卓.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
       at 安卓.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
       at 安卓.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
       at 安卓.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
       at 安卓.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
       at 安卓.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3025)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:934)
       at 安卓.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:973)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.support.v4.view.ViewPager.onMeasure(ViewPager.java:1658)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5295)
       at 安卓.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
       at 安卓.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:90)
       at 安卓.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1391)
       at 安卓.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:784)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1081)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5295)
       at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
       at 安卓.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5295)
       at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413)
       at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:696)
       at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:589)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5295)
       at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5295)
       at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1413)
       at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:696)
       at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:589)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5295)
       at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
       at com.安卓.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2439)
       at 安卓.view.View.measure(View.java:16749)
       at 安卓.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2072)
    at 安卓.

代码:

package com.example.expertsaraqeb.myapplication

import 安卓.content.Context
import 安卓.support.v7.widget.RecyclerView
import 安卓.util.Log
import 安卓.view.LayoutInflater
import 安卓.view.View
import 安卓.view.ViewGroup

class Madapter (val context: Context, val array:ArrayList<ModelItem>): RecyclerView.Adapter<Madapter.MyHolder>() {
    var TYPE1=15
    var TYPE2=28
    override fun getItemViewType(position: Int): Int {
        if (position==0){
            return TYPE1
        }else{
            return TYPE2
        }
    }
    override fun getItemCount(): Int {
       return array.size
    }

    override fun onBindViewHolder(p0: MyHolder?, p1: Int) {
        if (p0!!.itemViewType==TYPE1){
            val my= p0 as MyViewH //Error here

            Log.d("walidalhasn","p"+getItemViewType(p1))

        }else if (p0.itemViewType==TYPE1){
            Log.d("walidalhasn","j"+getItemViewType(p1))


        }
    }

    override fun onCreateViewHolder(p0: ViewGroup?, p1: Int): MyHolder {
        if (getItemViewType(p1)==TYPE1){
            val view= LayoutInflater.from(context).inflate(R.layout.row_no_color,p0,false)
            return MyViewH(view)
        }else {
            val view= LayoutInflater.from(context).inflate(R.layout.home_row,p0,false)
            return MyHolder(view)

        }

    }

    open class MyHolder (view: View):RecyclerView.ViewHolder(view)


}

class MyViewH(view: View?) : Madapter.MyHolder(view!!)

共 (1) 个答案

  1. # 1 楼答案

    onCreateViewHolder(p0: ViewGroup?, p1: Int)中,p1表示viewType

    应该是

    if (p1 == TYPE1) {
    

    而不是

    if (getItemViewType(p1) == TYPE1) {
    

    另外,您可能希望从getItemCount返回array.size + 1,因为您添加了头视图