二进制 XML 文件第 14 行:扩展自定义 ViewGroup class 时出错

Binary XML file line #14: Error inflating custom ViewGroup class

扩展自定义 ViewGroup 时出现问题。

无法启动activity 二进制 XML 文件行 #14:二进制 XML 文件行 #14:膨胀 class com.example.interactiveplatform.view.GraphLayout.

时出错

我搜索了这个问题,构造函数有问题。

<LinearLayout
    android:id="@+id/graph"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">

    <com.example.interactiveplatform.view.GraphLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    </com.example.interactiveplatform.view.GraphLayout>

</LinearLayout>



class GraphLayout(context: Context, attrs: AttributeSet, var chapterAdapter: ChapterAdapter) : ViewGroup(context, attrs) {

    private val detector: GestureDetector
    private val mMoveAndScaleHandler: MoveAndScaleHandler
    private val myListener: GestureDetector.SimpleOnGestureListener
    private var spacing = 0

    init {
        myListener = object : GestureDetector.SimpleOnGestureListener() {
            override fun onDown(e: MotionEvent?): Boolean {
                return true
            }
        }

        detector = GestureDetector(context, myListener)
        mMoveAndScaleHandler = MoveAndScaleHandler(context, this, chapterAdapter)
    }


    override fun onLayout(p0: Boolean, p1: Int, p2: Int, p3: Int, p4: Int) {
        for(i in 0 until childCount){
            val v = getChildAt(i)
            v.layout(v.left, v.top, v.right, v.bottom)
        }
    }


    override fun onTouchEvent(event: MotionEvent): Boolean {

        detector.onTouchEvent(event)
        invalidate()
        return mMoveAndScaleHandler.onTouchEvent(event)
    }


    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        setMeasuredDimension(400 * chapterAdapter.numberChapters,chapterAdapter.heightScreen)
    }


}

当您通过 XML 实例化您的自定义视图时,您不能像 chapterAdapter 那样传递自定义构造函数参数。此外,您必须支持所有 Android 的视图构造函数。例如,您可以这样做:

class GraphLayout @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ViewGroup(context, attrs, defStyleAttr)