如何将 Kotlin Android Extensions 与Fragments 一起使用?如果我在里面使用它们onCreateView(),我会得到这个NullPointerException异常:
Fragment
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 } } `
Kotlin 合成属性并不神奇,而且工作方式非常简单。当你访问btn_K时,它要求getView().findViewById(R.id.btn_K)。
btn_K
getView().findViewById(R.id.btn_K)
问题是您访问它太快了。中getView()返回。尝试在方法中这样做:null``onCreateView``onViewCreated
getView()
null``onCreateView``onViewCreated
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); } }