Search code examples
android-databinding

Android: data-binidng: disable click


I want to disable click when variable isAgree is false:

here code:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="android.view.View" />

        <variable
            name="handler"
            type="myproject.ui.SubscribeBrandDialogFragment" />

    </data>

     <TextView
                android:id="@+id/subscribeTextView"
                android:layout_width="185dp"
                android:layout_height="40dp"
                android:layout_marginTop="@dimen/default_margin"
                android:background="@{handler.isAgree ? @drawable/border_enable_bg : @drawable/border_disable_bg}"
                android:gravity="center"
                android:onClick="@{handler.isAgree ? handler.onClickSubscribe() : null}"
                android:textColor="@{handler.isAgree ? @color/color_primary : @color/disable_text_color}"            />

</layout>

But I get error in android:onClick :

e: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:onClick' with parameter type void on android.widget.TextView.
file:myproject\layout\subscribe_brand_dialog.xml
loc:100:31 - 100:81
****\ data binding error ****

    at android.databinding.tool.processing.Scope.assertNoError(Scope.java:112)
    at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:101)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:65)
    at org.jetbrains.kotlin.kapt3.ProcessorWrapper.process(annotationProcessing.kt:131)

I know that I can fix this by java code. But I want fix this ONLY in xml layout.


Solution

  • Use lambda expression.

    android:onClick="@{() -> handler.isAgree ? handler.onClickSubscribe() : null}"