小编典典

尝试访问 Kotlin 片段中的视图时出现 NullPointerException

all

如何将 Kotlin Android Extensions 与Fragments
一起使用?如果我在里面使用它们onCreateView(),我会得到这个NullPointerException异常:

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 ‘android.view.View
android.view.View.findViewById(int)’

这是片段代码:

package com.obaied.testrun.Fragment

import android.os.Bundle
import android.support.v4.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.obaied.acaan.R
import kotlinx.android.synthetic.main.fragment_card_selector.*

public class CardSelectorFragment : Fragment() {
    val TAG = javaClass.canonicalName

    companion object {
        fun newInstance(): CardSelectorFragment {
            return CardSelectorFragment()
        }
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
        btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }

        return rootView
    }
}
`

阅读 72

收藏
2022-05-16

共1个答案

小编典典

Kotlin
合成属性并不神奇,而且工作方式非常简单。当你访问btn_K时,它要求getView().findViewById(R.id.btn_K)

问题是您访问它太快了。中getView()返回。尝试在方法中这样做:null``onCreateView``onViewCreated

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
}
2022-05-16