16

I am trying to pass a another view of my xml as a parameter of a method in Google data binding... like this:

<LinearLayout
    android:id="@+id/faq_subject_about_ego"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/border_faq_btn"
    android:orientation="horizontal"
    android:layout_marginBottom="20dp"
    android:padding="4dp"
    android:gravity="center"
    android:onClick='@{(faq_title_about) -> viewModel.subjectRequest(faq_title_about.getText())}'>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon_faq"
        android:layout_marginRight="8dp"
        android:clickable="false" />

    <ebanx.com.ego.utils.custom_extension.CustomButtonBold
        android:id="@+id/faq_title_about"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/Button_FAQ"
        android:text="@string/btn_about_ego"
        android:clickable="false" />
</LinearLayout>

I need the text that is in my CustomButtonBold... But this is not working.

How can I pass the text of the button as a parameter?

Any help is appreciated!

2 Answers 2

30

The member generated for the id-able has a CamelCase name format. Also the view provided to the OnClickListener is the view being clicked. So just name the parameter arbitrarily and use the correct "global" member.

android:onClick='@{(v) -> viewModel.subjectRequest(faqTitleAbout.getText())}'
Sign up to request clarification or add additional context in comments.

2 Comments

Why doesn't ot work for me with Android Studio 4.1.2 ? It doesn't compile
@Sergiob I'd suggest to create a new question with your specific problem, including the error from the binding generator. Feel free to leave a link here as well...
7

If you are coding in Kotlin you could be tempted to write the following:

android:onClick='@{(v) -> viewModel.subjectRequest(faqTitleAbout.text)}'

It won't work, because the binding class is generated by the framework in Java. Another problem is that with EditText views you need to add also a call to

toString()

If you want to call a function that takes a string as parameter. So the code would be:

android:onClick='@{(v) -> viewModel.subjectRequest(faqTitleAbout.getText().toString())}'

That's how it works with Kotlin and Android Studio 4.1.2, otherwise you get a build error (...a weird one...). I don't know if that will change in the future or it has a different behavior with other versions.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.