I\'m trying to bind events with views in xml using DataBinding Library shipped with Android M. I\'m following examples from Android Developers and implement
If you're going to use your activity, might as well replace the context
object that is automatically binded, otherwise you're wasting the space.
A special variable named context is generated for use in binding expressions as needed. The value for context is the Context from the root View's getContext(). The context variable will be overridden by an explicit variable declaration with that name.
binding.setContext(this);
and
<variable name="context" type="com.example.MyActivity"/>
Note if you just use plain string onClick="someFunc"
that's not a databinding functionality at all. That's an older feature that uses a little reflection to find the method on the context.
I think you will need to bind the handlers
as well, maybe something like this in onCreate
:
MyHandlers handlers = new MyHandlers();
binding.setHandlers(handlers);
Many Ways for setting Click
Pass handler to binding.
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main); Hander handler = new Handler(); binding.setHandler(handler);
Set clicks (use any of below)
android:onClick="@{handler::onClickMethodReference}"
OR
android:onClick="@{handler.onClickMethodReference}"
OR
android:onClick="@{() -> handler.onClickLamda()}"
OR
android:onClick="@{(v) -> handler.onClickLamdaWithView(v)}"
OR
android:onClick="@{() -> handler.onClickLamdaWithView(model)}"
See Handler class for understanding.
public class Handler {
public void onClickMethodReference(View view) {
//
}
public void onClickLamda() {
//
}
public void onClickLamdaWithView(View view) {
//
}
public void onClickLamdaWithObject(Model model) {
//
}
}
Note that
onClickLamdaWithObject
example.View
object then just use (v)->
expression.Further reading
https://developer.android.com/topic/libraries/data-binding/expressions