【问题标题】:How to bind onClick event from view using Android Binding Library and Kotlin?如何使用 Android 绑定库和 Kotlin 从视图中绑定 onClick 事件?
【发布时间】:2017-01-07 03:33:33
【问题描述】:

我正在努力让 Android Binding Library 与 Kotlin 一起工作。我想要实现的是向我的 Presenter 类发送一个 onClick 事件。我所做的是:

  1. 在模块的 gradle 文件上启用数据绑定: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:指定为非空的参数为空:方法org.jetbrains.kotlin.annotation.RoundEnvironmentWrapper.getElementsAnnotatedWith,参数a

有什么想法吗?

【问题讨论】:

  • 粘贴你的 build.gradle 文件

标签: android data-binding kotlin android-databinding


【解决方案1】:

嗯,关注this的回答并注意使用后:

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

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

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

正如Data Binding Library official page 所指出的,由于某种原因,这对我不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多