Создание экземпляра прослушивателя интерфейса в Котлине

Я не могу, для своей жизни, создать интерфейс вне фрагмента в Kotlin или Kotlin для Android. Это была стандартная процедура на Java, чтобы сказать что-то вроде:

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

Обратите внимание: mInterfaceListener ссылается на интерфейс, а не на onCLickListener или что-то в этом роде

Как создаются интерфейсы в Котлин? Как создать «прослушиватель» и вызвать функции интерфейса?

Ниже приведены некоторые попытки в очень простом приложении, которое я использую для обучения. Обратите внимание на переменную mPresenterListener, которая является интерфейсом

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

И мой ведущий:

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

Интерфейс:

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

}

Вы можете делать наблюдатели / слушатели следующим образом:

 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..") } } 

а потом:

 textView.addTextChangedListener(watcher) 

Обратите внимание на объект при объявлении наблюдателя. Можно сделать то же самое с слушателем.

Intereting Posts
Kotlin: как передать функцию как параметр другому? Странная ошибка «Неразрешенная ссылка:» после обновления до Kotlin 1.0.5 Ошибка – невозможно изменить заголовок supportActionBar Что такое kotlin, равное полю аннотации Java с ограниченным типом подстановочного знака? Исправление некоторых синтаксиса Котлина Элементы меню панели инструментов Android никогда не отображаются, но переходят в переполнение Маркер Google Map не работает Как получить элементы из общего списка безопасным типом Странное поведение compose и ObservableTransformer в RxJava, когда переданный родословный расширяет что-то Мне нужно знать, почему? и если я изменю эту строку на "println (name + two)" ошибка решена? Ошибка при создании Enum в качестве первичного ключа в библиотеке базы данных Room Android – Check for Not Null не работает как ожидается что делает (x..x) .map в kotlin android Как использовать инъекцию зависимостей с помощью Kotlin для таргетинга JavaScript? Является ли экземпляр более дорогостоящим, чем вспомогательный объект val?