0

I am using Databinding library to update the views from view model object.

activity_main.xml

<layout xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="viewModel"
            type="com.example.android.DataViewModel" />
    </data>

          <com.google.android.material.button.MaterialButton
                android:id="@+id/btn"
                style="@style/Widget.MaterialComponents.Button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:paddingLeft="@{viewModel.setPaddingLeft}"
                android:paddingRight="@{viewModel.setPaddingLeft}"/>


</layout>

ViewModel:

@BindingAdapter({"android:paddingLeft"})
public static void setPaddingLeft(View view, float paddingFloat) {
    int padding = context.getResources().getDimension(R.dimen.padding);
    view.setPadding(padding, view.getPaddingTop(), view.getPaddingRight(),
            view.getPaddingBottom());
}

I am getting below error:

Found data binding error(s):

[databinding] {"msg":"Could not resolve com.example.android.DataViewModel.setPaddingLeft as an accessor or listener on the attribute."

Chait
  • 537
  • 6
  • 15
  • Change `android:paddingLeft="@{viewModel.setPaddingLeft}"` to `android:paddingLeft="@{(v)-> viewModel.setPaddingLeft(v)}"` – javdromero Mar 11 '21 at 01:50
  • I am getting below arror after above changes: [databinding] {"msg":"Cannot find a setter for \u003ccom.google.android.material.button.MaterialButton android:paddingLeft\u003e that accepts parameter type \u0027lambda\u0027\n\nIf a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches." – Chait Mar 11 '21 at 02:20
  • Ok, another question, you are not using `float paddingFloat`, why declared it? Just put one parameter on your function and use your `android:paddingLeft="@{viewModel.setPaddingLeft}" ` – javdromero Mar 11 '21 at 13:56
  • If i pass only View parameter, i am getting below error: error: @BindingAdapter setPaddingLeft(android.view.View) has 1 attributes and 0 value parameters. There should be 1 or 2 value parameters. I tried with below code: android:paddingLeft="@{viewModel.setPaddingLeft}" – Chait Mar 11 '21 at 15:36

0 Answers0