Crear una instancia de un oyente de interfaz en Kotlin

No puedo, por mi vida, crear una interfaz fuera de un fragment en Kotlin o Kotlin para Android. Era un procedimiento estándar en Java decir algo como:

MyInterface mInterfaceListener = new MyInterface(this); mInterfaceListener.invokeSomeGenericMethod(); 

Tenga en count que mInterfaceListener se refiere a una interfaz, no a onCLickListener ni nada de eso

¿Cómo se instancian las interfaces en Kotlin? ¿Cómo puedo hacer un "oyente" y activar las funciones de una interfaz?

A continuación se muestran algunos bashs en una aplicación muy simple que estoy haciendo con fines de aprendizaje. Observe la variable mPresenterListener que es una interfaz

  class QuoteActivity : QuoteContract.ViewOps, AppCompatActivity() { private lateinit var vText: TextView private lateinit var vFab: FloatingActionButton private lateinit var mPresenterListener: QuoteContract.PresenterOperations override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mPresenterListener = this.mPresenterListener vText=findViewById(R.id.main_quote) vFab=findViewById(R.id.main_fab) vFab.setOnClickListener{ mPresenterListener.onQuoteRequested() } } override fun displayQuote(quote: String) { vText.text = quote } } 

Y mi presentador:

  class QuotePresenter(private val viewListener: QuoteContract.ViewOps): QuoteContract.PresenterOperations { private lateinit var modelListener: QuoteContract.ModelOperations init { modelListener = this.modelListener } override fun onQuoteRequested() { modelListener.generateQuote() } override fun onQuoteGenerated(quote: String) { viewListener.displayQuote(quote) } } 

La interfaz:

 interface QuoteContract { //Methods available to Presenter (Presenter -> View) interface ViewOps{ fun displayQuote(quote: String) } //Ops offenetworking from presenter to view (Presenter->View) interface PresenterOperations { //Presenter->View fun onQuoteRequested() //Presenter->Model fun onQuoteGenerated(quote: String) } //Ops offenetworking from Model to Presenter (Model -> Presenter) interface ModelOperations { fun generateQuote() } 

}

Puede hacer observadores / oyentes como este:

 val textView: TextView = this.findViewById(R.id.amountEdit) val watcher = object : TextWatcher { override fun afterTextChanged(p0: Editable?) { val inputAmount = textView.text.toString val amount = if (!inputAmount.isEmpty()) inputAmount.toDouble() else 0.0 conversionViewModel?.convert(amount) } override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { println("before text changed called..") } override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { println("text changed..") } } 

y entonces:

 textView.addTextChangedListener(watcher) 

Observe el object al declarar al observador. Puede hacer lo mismo con un oyente.

  • Android Studio (Kotlin) cómo convertir StringArray en MutableList
  • Clase de extensión genérica con object compañero en Kotlin
  • Kotlin VerifyError: object no inicializado existe en la twig hacia atrás 90
  • Operador as y ClassCastException
  • Kotlin: cómo pasar la matriz a la anotación de Java
  • Ejecute testings de Kotlin Koans desde Android Studio
  • Error de compilation llamando a un método de extensión desde otro método de extensión en Kotlin
  • Diferencia de tipo inesperada entre el código equivalente de Java y Kotlin Stream
  • Val no puede ser reasignado error de compilation de time para variable local en diversión en kotlin
  • Kotlin, problema de condición de carrera
  • Kotlin gradle.build ZipException debido a duplicates