Kotlin/Android:无法通过画布将LiveData传递给customView

Kotlin/Android:无法通过画布将LiveData传递给customView,android,kotlin,canvas,viewmodel,android-custom-view,Android,Kotlin,Canvas,Viewmodel,Android Custom View,我在ViewModel中实例化了一个Graph对象,并试图将其传递到我创建的自定义画布视图,但我不断收到“尝试在空对象引用上调用虚拟方法…”的消息 下面我发布我的代码和错误日志 自定义画布视图 Class DesignCanvasView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context)

我在ViewModel中实例化了一个Graph对象,并试图将其传递到我创建的自定义画布视图,但我不断收到“尝试在空对象引用上调用虚拟方法…”的消息

下面我发布我的代码和错误日志

自定义画布视图

Class DesignCanvasView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
    ) : View(context) {

private lateinit var extraCanvas: Canvas
private lateinit var extraBitmap: Bitmap
lateinit var graph : Graph
碎片 类DesignFragment:Fragment(){

视图模型

class DesignViewModel : ViewModel() {
    val graph = MutableLiveData<Graph>(Graph())
}
class DesignViewModel:ViewModel(){
val graph=MutableLiveData(graph())
}
错误消息

编辑 布局代码

<?xml version="1.0" encoding="utf-8"?>
<layout 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">


    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".screens.design.DesignFragment">

        <com.example.druggame.screens.design.DesignCanvasView
            android:id="@+id/designCanvasView"
            android:layout_width="match_parent"
            android:layout_height="450sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.4"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.5">

        </com.example.druggame.screens.design.DesignCanvasView>


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>


感谢您提前提供的帮助。

这个问题实际上与数据绑定无关,但这是因为您的自定义视图。您的构造函数根据数据绑定的需要接收一个
属性集,但您从未将其传递给超类(
视图
)。因此,它应该如下所示:

class DesignCanvasView@JVM重载构造函数(
上下文:上下文,
属性集?=null,
defStyleAttr:Int=0
):视图(上下文、属性、defStyleAttr)

还有几个其他注意事项。建议您使用单独的绑定类来扩展绑定,而不是泛型的
DataBindingUtil
,除非您有特定的理由这样做

其次,通常最好的做法是在
onViewCreated
中创建所有与视图相关的逻辑,而不是
onCreateView
中的初始绑定


最后,尽管在您的情况下绑定不需要生命周期所有者,但您应该始终坚持使用使用
viewLifecycleOwner
检索的视图所有者进行绑定(但是,只有在您没有特定的“不允许”时,才可以).

请确保您在问题中以文本而不是图像的形式发布代码。我建议您在提问之前先看一看。谢谢您让我知道。我更正了帖子。非常奇怪,我测试了一个类似的示例,效果很好,可能是post
R.layout.design_fragment
?到目前为止,我能看到的一切都很好。我更新了ted R.layout.design\u fragments似乎是
绑定。designCanvasView
出于未知原因是一个空视图,我理解,现在它非常有意义。非常感谢您解决这个问题,您的时间和我们所有的建议。我肯定会使用所有这些。祝您有一个gr8天。没问题,祝您的项目好运!
<?xml version="1.0" encoding="utf-8"?>
<layout 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">


    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".screens.design.DesignFragment">

        <com.example.druggame.screens.design.DesignCanvasView
            android:id="@+id/designCanvasView"
            android:layout_width="match_parent"
            android:layout_height="450sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.4"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.5">

        </com.example.druggame.screens.design.DesignCanvasView>


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>