Passing a listener object as a function parameter in kotlin

Viewed 14221

I'm trying to pass a listener from an action to a class (an adapter).

In java (code from the Action):

  private void setListeners() {
    adapterRecyclerView.setListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    SomeCodehere....
                }
            });
}

(code from the adapter)

public void setListener(View.OnClickListener listener) {
    this.listener = listener;
}

It works.

Now I'm trying to traslate to kotlin. I translate first the action (translation the action to kotlin):

    private fun setListeners() {
    // !! is not fine i know
    adapterRecyclerView!!.setListener  { v  ->
                          SomeCodehere....
    }
}

At this point still works. With the code of the adapter still in java and code of the class in kotlin. Now I translate the adapter to kotlin:

fun setListener(listener: View.OnClickListener) {
    this.listener = listener 
}

Now it doesn't work. The Action does not compile.

Error: cannot infer a type for this parameter "v". required View.OnClickListener. found (???) Unit.

How I must do the cast here? Why passing the parameter from kotlin to java works and from kotlin to kotlin it does not?

2 Answers
Related