Кнопка onCLick не работает в MVVM Android - PullRequest
0 голосов
/ 09 июля 2020

У меня есть установка MVVM для моего проекта, и у меня есть простой макет с EditText и кнопкой, и когда я нажимаю кнопку, я хочу показать текст, который находится в EditText.

Для кнопки, когда я добавить. этот код android:onClick="@={() -> addProductViewModel.addProduct()}" дает мне ошибку A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

, и когда я удаляю это, как сборки приложений, все в порядке.

Ошибка не так очевидна, и я не уверен, как ее исправить.

вот мой код

add_product. xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <data class=".AddProductBinding">
        <variable
            name="addProductViewModel"
            type="com.rao.iremind.AddProductViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <EditText
            android:id="@+id/etProductName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:text="@={addProductViewModel.inputProductName}"
            android:hint="Product name"
            android:inputType="textPersonName"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/btn_add_product"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="160dp"
            android:text="Add product"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/etProductName" />


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

AddProductViewModel

class AddProductViewModel (
    private val repository: ProductRepository,
    private val context: Context
): ViewModel(), Observable {

    @Bindable
    val inputProductName = MutableLiveData<String>()


    fun addProduct() {
        //inputProductName.value
    Toast.makeText(context, " add product ", Toast.LENGTH_LONG).show()
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {

    }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {

    }
}

AddProductViewModelFactory

class AddProductViewModelFactory (
    private val repository: ProductRepository,
    private val context: Context
) : ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        if (modelClass.isAssignableFrom(AddProductViewModel::class.java)) {
            return AddProductViewModel(repository, context) as T
        }
        throw IllegalArgumentException("Unknown View Model class")
    }
}

Мы очень ценим вашу помощь и предложения

Спасибо R

...