How to set click listener to LinearLayout using data binding
You can handle any view click event like below:
Create interface for handle click event like below:
interface OnClickHandlerInterface { void onClick(View view) }
Implement that click listener in action class as shown below:
class MainActivity implements OnClickHanderInterface{ @Override void OnClick(View view){ } }
Now bind this interface in XML file:
<data> <variable name="clickHandler" type=".OnClickHandlerInterface" /> </data>
Now register this interface in action class with use of binding object:
mActivityMainBinding.clickHandler = this
Now set onClick on any which you want to set click listener. For you it's LinearLayout:
<LinearLayout android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="72dp" android:clickable="true" android:focusable="true" android:onClick="@{(v)-> clickHandler.onClick(v)}" android:orientation="vertical"> </LinearLayout>
Now handle click when your linearLayout clicked you can get click on interface which is implemented in action class:
@Override void OnClick(View view){ switch(view.getId()){ case R.id.linearLayout: // Handler click and do some actions break; } }
As mentioned above you can get layout click by data binding.
So everything was set up correctly and the generated bindings file shows the click listener being set up correctly, but for some very odd reason half the bindings were working and the newer ones weren't. By newer ones meaning the LinearLayout
and all the attempts around it.
What solved the problem was a simple cache invalidation and respective restart and voila, the click listener is working perfectly on the LinearLayout
. Just remember to set it clickable
and focusable
and any child views set as not clickable so they don't consume the event before the parent.