Activando una interfaz en Kotlin para Android

Hay una implementación específica de interfaz cuando se trata de usar Kotlin para Android: activar una interfaz a partir de un fragment. Considere el escenario común donde un Fragmento debe comunicar una acción de IU a la Actividad principal. En Java, definiríamos la interfaz, crearíamos una instancia de "escucha" de ella e implementaríamos / anularemos acciones en los padres de la interfaz. Es la creación de una instancia de escucha que no es tan directa para mí. Después de search en Google, encontré un ejemplo de implementación, pero no entiendo por qué funciona. ¿Hay una mejor manera de hacer esto? ¿Por qué debe ser implementado de la manera en que está abajo?

class ImplementingFragment : Fragment(){ private lateinit var listener: FragmentEvent private lateinit var vFab: FloatingActionButton //Here is the key piece of code which triggers the interface which is befuddling to me override fun onAttach(context: Context?) { super.onAttach(context) if(context is FragmentEvent) { listener = context } } //Notice the onClickListener using our interface listener member variable override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val v: View? = inflater.inflate(R.layout.fragment_layout, container, false) vFab = v?.findViewById(R.id.fh_fab) vFab.setOnClickListener{listener.SomethingHappened()} return v } } interface FragmentEvent{ fun SomethingHappened() } 

En este código lateinit var listener: FragmentEvent debe inicializarse y no puede ser null . Así que onAttach debería onAttach como

 override fun onAttach(context: Context?) { super.onAttach(context) if (context is FragmentEvent) { listener = context } else { throw RuntimeException(context!!.toString() + " must implement FragmentEvent") } } 

En este caso, si olvida implementar FragmentEvent en Activity , obtendrá una exception, de lo contrario, la callback estará list para su uso.

  • Configuración de networking de Android
  • Problema de properties genéricas de Kotlin
  • ¿Referencia fuera de la class sellada en Kotlin?
  • Android: ¿cómo lograr setOnClickListener en Kotlin?
  • Oyente dentro del productor
  • Escribir un timer usando Handler en Kotlin
  • Diseños de Anko: layouts distintivos en applyRecursively
  • Kotlin: Iterar a través de un JSONArray