如何使用Android绑定库和Kotlin从视图绑定onClick事件?
我努力使Android绑定库与Kotlin一起工作。 我想要实现的是向我的Presenter类派发一个onClick事件。 我所做的是:
- 在模块的gradle文件上启用数据绑定:dataBinding
dataBinding {enabled = true}
- 导入数据绑定编译器:
kapt 'com.android.databinding:compiler:2.0.0-beta6'
- 生成存根:
kapt {generateStubs = true}
-
在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() }
-
准备布局:
<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());
正如数据绑定库官方页面所指出的,由于某种原因,我没有工作。