Как связать событие onClick из представления с помощью Android Binding Library и Kotlin?

Я изо всех сил пытаюсь заставить Android Binding Library работать с Kotlin. То, что я хочу достичь, – отправить событие onClick моему классу Presenter. Я сделал это:

  1. Включить привязку данных к файлу dataBinding {enabled = true} модуля: dataBinding {enabled = true}
  2. Импорт компилятора данных: kapt 'com.android.databinding:compiler:2.0.0-beta6'
  3. Создание заглушек: kapt {generateStubs = true}
  4. Использовать метод на MainPresenter.kt:

     fun onClickEditProfile () { log("method you hoped to get called was called") mView!!.getContext().snackbar("received event: onClickEditProfile via data binding, this is awesome").show() } 
  5. Подготовьте макет:

     <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="presenter" type="br.com.tyllt.presenter.MainPresenter" /> </data> <com.github.clans.fab.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{() -> presenter.onClickEditProfile()}" android:src="@drawable/ic_edit" app:fab_colorNormal="@color/colorPrimary" app:fab_colorPressed="@color/colorPrimaryDark" app:fab_hideAnimation="@anim/fab_scale_down" app:fab_label="Edit Profile" app:fab_size="mini" /> </layout> 

Проблема в том, что когда я создаю apk, я получаю следующее исключение:

 Error:Execution failed for task ':app:compileDebugJavaWithJavac'. 

java.lang.IllegalArgumentException: Параметр, указанный как не-null, имеет значение null: метод org.jetbrains.kotlin.annotation.RoundEnvironmentWrapper.getElementsAnnotatedWith, параметр a

Есть идеи?

Ну, после этого ответа и позаботиться о том, чтобы использовать:

 private fun initDataBinding() { val binding: ActivityLoginBinding = DataBindingUtil.setContentView(this, R.layout.activity_login) binding.presenter = mPresenter } 

Я смог заставить его работать. Проблема была в том, что я инициировал привязку только с помощью:

 MainActivityBinding binding = MainActivityBinding.inflate(getLayoutInflater()); 

Как указано на официальной странице библиотеки привязки данных , которая по какой-то причине не работала для меня.

Intereting Posts
Модуль Dagger не работает после преобразования из Java в Kotlin Делегация Котлина выражает вместо фиксированной ссылки Объект Kotlin vs companion-object vs package методы rx-java2 Schedulers.io () steel вызывает метод из mainThread Kotlin – абстрактная функция с общим типом возврата Количество экземпляров каждого тега с использованием функционального программирования «Java» «не распознается как внутренняя или внешняя команда, программный или командный файл. в Котлине Доступ к информации из группы BroadcastReceiver в Android с использованием kotlin Функция интерфейса сталкивается с функцией getter Безусловная инфляция макета из адаптера просмотра. Котлин Заполнение строки с помощью Firestore Kotlin + Кинжал 2: Кинжал * файлы не будут генерировать supportActionBar имеет значение null, используя Kotlin Android всегда Преобразование наблюдаемого в текущее с противодавлением в RxJava2 Cant 'observOn' основная нить с RxKotlin