Kotlin Android扩展和片段

如何使用带Fragment的Kotlin Android扩展? 如果我在onCreateView()使用它们,我得到这个NullPointerExceptionexception:

导致: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 } } ` 

Solutions Collecting From Web of "Kotlin Android扩展和片段"

Kotlin综合性能不是魔术,而是以非常简单的方式工作。 当你访问btn_K ,它会调用getView().findViewById(R.id.btn_K)

问题是您正在访问得太快。 getView()onCreateView返回null 。 尝试在onViewCreated方法中做到这onViewCreated

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

你正在调用这个btn_K ,因为那时它返回一个null,并且给你空指针exception。

你可以在onActivityCreated()方法中使用这个视图,这个方法在片段生命周期的onCreateView()之后被调用。

 onActivityCreated() { super.onActivityCreated(savedInstanceState) btn_K.setOnClickListener{} }