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.

  • Spring Boot: no puede include recurso estático
  • Una alternativa a la class de Matemáticas para Flotadores
  • La callback OnSuccessListener de Firebase Storage no llama
  • Propiedad protegida abstracta Kotlin
  • ¿Hay una manera simple de get un object por _id en Kotlin?
  • Maneras de ofuscar el acceso a miembros de la class preferentemente privados, pero en realidad públicos, con el fin de utilizarlos en methods en línea
  • La subclass de class sellada de Kotlin debe convertirse a la class base si se proporciona como RxJava Observable
  • IllegalStateException: la actividad se ha destruido (nivel de API <21)
  • Propiedad de extensión en línea Kotlin
  • La fusión del manifiesto falló: al usar el module kotlin
  • Inicie la actividad de superposition sin mostrar el rest de la aplicación