I just finished watching Advanced Data Binding - Google I/O 2016 and would like to apply the following to reduce repetition of my expression used in different views.
But I cannot make it work in my case:
<ImageButton android:id="@+id/btn_list" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="start" android:background="@drawable/btn_s01_list" android:visibility="@{bean.shouldHideControls? View.GONE: View.VISIBLE}"/> <ToggleButton android:id="@+id/btn_radar" android:layout_width="48dp" android:layout_height="48dp" android:background="@drawable/btn_radar_selector" android:checked="false" android:gravity="end" android:text="" android:textOff="" android:textOn="" android:visibility="@{btn_list.visibility}"/>
and I got
Error:(426, 39) Identifiers must have user defined types from the XML file. btn_list is missing it
Edit:
I missed an important point in the same talk... The View IDs are camel-casified.
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.
Step 2: Enabling the ViewBinding Feature There is a need to enabling the ViewBinding feature in Android Studio 4.0 and above, inside the app-level build gradle file. Invoke the following code snippet inside the android{} body of the gradle file.
ViewModel: It acts as a link between the Model and the View. It's responsible for transforming the data from the Model. It provides data streams to the View. It also uses hooks or callbacks to update the View.
The binding process converts your IDs to properties in the binding class, and the generated names are camel-casified.
You may need to change the following line:
android:visibility="@{btn_list.visibility}"/>
To this:
android:visibility="@{btnList.visibility}"/>
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