Extensiones y fragments de Kotlin para Android

¿Cómo usar las extensiones de Kotlin para Android con Fragment s? Si los uso dentro onCreateView() , obtengo esta exception NullPointerException :

Causado por: java.lang.NullPointerException: bash de invocar el método virtual 'android.view.View android.view.View.findViewById (int)' en una reference de object nulo

Aquí está el código de fragment:

 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 } } ` 

Las properties sintéticas de Kotlin no son mágicas y funcionan de una manera muy simple. Cuando accede a btn_K , llama a getView().findViewById(R.id.btn_K) .

El problema es que lo estás accediendo demasiado pronto. getView() devuelve null en onCreateView . Intenta hacerlo en el método onViewCreated :

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

Está llamando a este btn_K demasiado pronto, ya que en ese momento devuelve un valor nulo y le está dando Excepción del puntero nulo.

Puede usar estas vistas mediante este complemento sintético en el método onActivityCreated() que se llama justo después de onCreateView() del ciclo de vida de Fragment.

 onActivityCreated() { super.onActivityCreated(savedInstanceState) btn_K.setOnClickListener{} } 
  • Cómo inicializar widgets en Android usando kotlin
  • El tipo Out-Projected 'ArrayList <*>' prohíbe el uso de 'public fun fun add (índice: Int, elemento: E): Unidad definida en java.util.ArrayList'
  • Crea controles dinámicamente en Android usando Kotlin
  • Compara una vista de text con una string en Kotlin
  • La diferencia entre !! y? en Kotlin
  • Problema de Kotlin Gradle
  • ¿Cómo crear un button en Kotlin que abre una nueva actividad (Android Studio)?
  • Advertencia obsoleta de Kotlin Runtime (complemento Kotlin 1.1.2-release-Studio2.3-3)
  • Cómo usar null con kotlin @Parcelize
  • Extensiones en Kotlin
  • La interoperabilidad Varargs Kotlin Java no funciona correctamente