Kotlin SurfaceView / Lateinit 属性 Surface 尚未初始化

问题描述 投票:0回答:1

我还很新手,不知道该语言的一些功能。我遇到以下问题,这是我的代码:

private lateinit var surface: SurfaceView
private var _binding: FragmentItem2Binding? = null
private val binding get() = _binding!!

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
    ): View? {
    _binding = FragmentItem2Binding.inflate(inflater, container, false)
    return binding.root

     }


override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    surface?.findViewById<SurfaceView>(R.id.surf)
        this.surface!!.holder!!.addCallback(object : SurfaceHolder.Callback {
            override fun surfaceCreated(holder: SurfaceHolder) {
               TODO("Not yet implemented")
            }

            override fun surfaceChanged(
               holder: SurfaceHolder,
               format: Int,
               width: Int,
               height: Int,
            ) {
               TODO("Not yet implemented")
            }

            override fun surfaceDestroyed(holder: SurfaceHolder) {
               TODO("Not yet implemented")
            }
        })

xml:

\<SurfaceView
    android:layout_width="400sp"
    android:layout_height="400sp"
    android:id="@+id/surf"
\\\>

如果我输入lateinit var,它会给出错误: kotlin.UninitializedPropertyAccessException:lateinit 属性表面尚未初始化

如果我输入: 私有变量表面:SurfaceView? = 空 它给出了一个错误: java.lang.NullPointerException

所以。我需要做什么???

android kotlin nullpointerexception surfaceview lateinit
1个回答
0
投票

您没有在任何地方初始化该值。尝试:

surface = findViewById<SurfaceView>(R.id.surf)

或者在viewBinding中:

surface - viewBinding.surf //or what ever the id of the surface is
© www.soinside.com 2019 - 2024. All rights reserved.