如何使用Android绑定库和Kotlin从视图绑定onClick事件?

我努力使Android绑定库与Kotlin一起工作。 我想要实现的是向我的Presenter类派发一个onClick事件。 我所做的是:

  1. 在模块的gradle文件上启用数据绑定:dataBinding 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,parameter a

任何想法?

那么,遵循这个答案,照顾使用:

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

我能够使它工作。 问题是,我只是使用以下命令启动绑定:

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

正如数据绑定库官方页面所指出的,由于某种原因,我没有工作。