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!
View binding doesn't support layout variables or layout expressions, so it can't be used to declare dynamic UI content straight from XML layout files. View binding doesn't support two-way data binding.
Databinding is really faster compared to findViewById and setText . Not only performance, It is also much faster and maintainable for mid, full-scale projects. As a side note, benefits include: performance.
Data binding can also mean that if an outer representation of the data in an element changes, then the underlying data can be automatically updated to reflect the change. For example, if the user edits the value in a TextBox element, the underlying data value is automatically updated to reflect that change.
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())}'
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With