In Android Kotlin, What's The Right Way To Pass A Onclick Event Into A Viewholder?
Solution 1:
From the perceptive of separation of concern, all the clickListeners
are supposed to be handled in the Activity
or Fragment
and Adapters
are meant just to wrap around the items, in your case Flower
and present them in a way which can be used by the RecyclerView
to display on the screen.
With that being said, the core logic of clickListeners is to be moved out of the bind
method into the activity/fragment and that's precisely whats the firstMethod is all about. Matter of fact, I haven't noticed any performance improvement by employing the FirstMethod over the second one yet I insist on using FirstOne because its more of code organizing.
Solution 2:
IMHO I feel like the adapter should know nothing about click listeners or any details about the ViewHolder
; so I wouldn't pass the callback through the adapter.
I like passing the callback to my ViewHolder
but instead of mapping into the init
block I do it on the onBind
hook from the adapter where I receive the view as a parameter. Also, I pass or update the ViewHolder
s directly into my Adapter
s. And then have some generic functions to compute whether the data-set has changed or not.
If you do it like this, you have the benefit that you may build 1 generic adapter and use it elsewhere without really minding how many different types of ViewHolder
you may have to implement later on as it is completely agnostic.
TLDR;
So based on what you've provided us I would use the good things of both approaches. Binding the callback into the bind
hook and passing the callback through the constructor of the ViewHolder
Post a Comment for "In Android Kotlin, What's The Right Way To Pass A Onclick Event Into A Viewholder?"