Как указать пользовательский метод для MaterialButton? - PullRequest
1 голос
/ 02 июня 2019

Я использую привязку данных в своем проекте. Когда я компилирую свой проект, компилятор показывает мне эту ошибку.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
 android.databinding.tool.util.LoggedErrorException: Found data binding errors.
  ****/ data binding error ****msg:Cannot find the setter for attribute 'app:backgroundTint' with parameter type int on com.google.android.material.button.MaterialButton.

file:C:\Users\TikTak\AndroidStudioProjects\CarbonExample\app\src\main\res\>layout\activity_main.xml
  loc:21:30 - 21:109
  ****\ data binding error ****

Сначала я определил такой адаптер, но компилятор снова показал мне эту ошибку.

@BindingMethods(value = [
    BindingMethod(
        type = MaterialButton::class,
        attribute = "app:backgroundTint",
        method = "setBackgroundTintList")])
object MaterialButtonBindingAdapters {

}

Второй раз, когда я написал адаптер таким образом, но компилятор снова показал мне эту ошибку.

@BindingMethods(value = [
    BindingMethod(
        type = MaterialButton::class,
        attribute = "app:backgroundTint",
        method = "setBackgroundTintList")])
object MaterialButtonBindingAdapters {
    @BindingAdapter("app:backgroundTint")
    @JvmStatic fun setBackgroundTintList(button: MaterialButton, color: ColorStateList) {
        button.backgroundTintList = tintList
    }
}

Вот мой макет

<?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
        <data>
            <variable
                name="viewmodel"
                type="com.example.carbonexample.ViewModel" />
        </data>

        <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:padding="16dp"
            tools:context=".MainActivity">

            <com.google.android.material.button.MaterialButton
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:layout_margin="16dp"
                app:backgroundTint="@{viewmodel.isMine &amp;&amp; !viewmodel.isGuestMode ?  @color/white : @color/colorPrimary}"
                android:text="Test"
                android:textAllCaps="false"
                android:textColor="@color/black"
                app:cornerRadius="4dp"
                tools:text="Подключить акцию" />

            <!--<com.google.android.material.button.MaterialButton
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:layout_margin="16dp"
                app:backgroundTint="@{viewmodel.isMine &amp;&amp; !viewmodel.isGuestMode ?  @color/white : @color/colorPrimary}"
                app:rippleColor="@{viewmodel.isMine &amp;&amp; !viewmodel.isGuestMode ?  @color/gray_trans_light : @color/colorPrimaryDarker}"
                app:strokeWidth="@{viewmodel.isMine &amp;&amp; !viewmodel.isGuestMode ?  @dimen/with_stroke : @dimen/no_stroke}"
                app:strokeColor="@color/gray_solid"
                android:enabled="@{viewmodel.enabled &amp;&amp; !viewmodel.progress}"
                android:onClick="@{v -> viewmodel.onActionButtonClicked()}"
                android:text="@{viewmodel.buttonCaption}"
                android:textAllCaps="false"
                android:textColor="@color/black"
                app:cornerRadius="4dp"
                android:visibility="@{viewmodel.buttonVisibility ? View.VISIBLE : View.GONE}"
                tools:text="Подключить акцию" />-->

            <Button
                android:id="@+id/btnIsMine"
                android:text="is mine"
                android:layout_width="wrap_content"
                android:onClick="funIsMine"
                android:layout_height="wrap_content"/>

            <Button
                android:id="@+id/btnEnabled"
                android:text="Button enabled"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </LinearLayout>
</layout>

Как я могу решить эту проблему?

...