2017-01-07 1 views
1

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

  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 я получаю followin исключение:

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

java.lang.IllegalArgumentException: Параметр определяется как не-нуль равно нулю: метод орг. jetbrains.kotlin.annotation.RoundEnvironmentWrapper.getElementsAnnotatedWith, параметр a

Идея?

+0

Вставьте файл build.gradle –

ответ

0

Ну, после того, как следующий this ответ и уход использовать:

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

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

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

Как указан на Data Binding Library official page, которые по какому-то причинам не работал для меня.

Смежные вопросы